2011-03-10 13 views
8

मेरे एप्लिकेशन में एक "फोटोबुथ" सुविधा है जो उपयोगकर्ता को कैमरे के साथ एक तस्वीर लेने की अनुमति देगी और साथ ही कैमरे के दृश्य के ऊपर एक ओवरले छवि दिखाएगी। तस्वीर लेने के बाद, मुझे फाइल सिस्टम में तस्वीर लेने के दौरान उपयोगकर्ता को क्या सहेजना है उसे सहेजने की ज़रूरत है।कैमरे के कब्जे वाले छवि के साथ छवि ओवरले सहेजें

मुझे इसका समाधान विकसित करते समय 1 बड़ी समस्या का अनुभव हुआ है: एक छवि को कैप्चर करने के लिए संगत आयाम जिसमें मैं ओवरले छवि संलग्न कर सकता हूं जिसके परिणामस्वरूप उपयोगकर्ता ने तस्वीर लेने के दौरान देखा था।

ऐसा लगता है कि मैं परिभाषित आयामों के साथ कैमरे से एक छवि कैप्चर नहीं कर सकता (मुझे मूल रूप से उनकी सूची से चुनना है)। कुछ फोन केवल कुछ आयाम उत्पन्न कर सकते हैं।

चूंकि मैं कैप्चर की गई छवि का आकार नहीं चुन सकता, ऐसा लगता है कि मुझे ओवरले छवि के कई अलग-अलग आकार शामिल करने की आवश्यकता होगी, और कैप्चर की गई छवि पर सबसे अच्छा मिलान संलग्न करना होगा। मैं कैमरे की छवि के शीर्ष पर किसी पुराने ओवरले को थप्पड़ मार नहीं सकता और इसे सही दिखता हूं।

सवाल:

  • मैं इस "कैमरा छवि + ओवरले छवि रचना" प्रक्रिया खत्म हो-उलझी हूँ?
  • कई अलग-अलग आकार ओवरले छवियों को शामिल किए बिना इस कार्य को पूरा करने में आपके पास क्या सुझाव हैं?

संपादित करें: यहां मेरा समाधान (संक्षिप्त) है। कृपया महसूस करें कि यह करने के लिए यह एक सही और शायद सबसे प्रभावी तरीका नहीं है, लेकिन यह काम करता है। कुछ चीजें अनावश्यक/अनावश्यक हो सकती हैं लेकिन जो भी हो!

नोट्स:

  • इस टेबलेट डिवाइस पर भी महान काम नहीं करता।
  • ओवरले छवि लैंडस्केप मोड में होने की
  • ओवरले आकार 480x320
  • है (यहां तक ​​कि आप छवि चित्र में फोन पकड़े उठाएंगे हालांकि) अगर आप लैंडस्केप मोड, जबकि करने के लिए गतिविधि के लिए मजबूर करने की जरूरत है घुमाया जा करने की जरूरत है तस्वीर लेने (अब ओवरले अपने चित्र की तरह लग रहा है!)
  • मैं ओवरले छवि addContentView(overlayImageView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

... का उपयोग कर दृश्य जोड़ने

final Camera.PictureCallback jpegCallback = new Camera.PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     Bitmap mutableBitmap = null; 
     try { 
        //for a PORTRAIT overlay and taking the image holding the phone in PORTRAIT mode 
      mutableBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options).copy(Bitmap.Config.RGB_565, true); 
      Matrix matrix = new Matrix(); 
      int width = mutableBitmap.getWidth(); 
      int height = mutableBitmap.getHeight(); 
      int newWidth = overlayImage.getDrawable().getBounds().width(); 
      int newHeight = overlayImage.getDrawable().getBounds().height(); 
      float scaleWidth = ((float) newWidth)/width; 
      float scaleHeight = ((float) newHeight)/height; 
      matrix.postScale(scaleWidth, scaleHeight); 
      matrix.postRotate(90); 

      Bitmap resizedBitmap = Bitmap.createBitmap(mutableBitmap, 0, 0, mutableBitmap.getWidth(), mutableBitmap.getHeight(), matrix, true); 
      finalBitmap = resizedBitmap.copy(Bitmap.Config.RGB_565, true); 
      Canvas canvas = new Canvas(finalBitmap); 

      Bitmap overlayBitmap = BitmapFactory.decodeResource(getResources(), overlay); 
      matrix = new Matrix(); 
      matrix.postRotate(90); 
      Bitmap resizedOverlay = Bitmap.createBitmap(overlayBitmap, 0, 0, overlayBitmap.getWidth(), overlayBitmap.getHeight(), matrix, true); 
      canvas.drawBitmap(resizedOverlay, 0, 0, new Paint()); 
      canvas.scale(50, 0); 
      canvas.save(); 
      //finalBitmap is the image with the overlay on it 
     } 
     catch(OutOfMemoryError e) { 
      //fail 
     } 
    } 
} 
+0

हाय, बिन्नीब! अब इसी तरह की समस्या है। क्या आप मेरी मदद कर सकते हैं? क्या आप अपना कोड दिखा सकते हैं? धन्यवाद! – vsvydenko

उत्तर

1

मुझे लगता है कि यह एक सवाल है कि आप अपने ओवरले में कैसे बदलाव करते हैं। आप इसे कैप्चर किए गए छवि आकार के अनुसार फसल कर सकते हैं और इसके अनुपात को संरक्षित करने के लिए इसे आकार देने के लिए आकार बदल सकते हैं। आप इसके अनुपात को बैकग्राउंड अनुपात में इसकी इष्टतम स्थिति की तुलना करके ओवरले रख सकते हैं।

मैं व्यापक सीमा के साथ खींचने के लिए फिल्टर का उपयोग करके छवि को आसानी से आकार देने के लिए विस्तृत सीमा (ब्लीड) के साथ पर्याप्त रूप से ओवरले रखता हूं। मुझे लगता है कि ओवरले कुछ ऐसा है जो आप डिज़ाइन करेंगे और पारदर्शी हिस्सों के साथ, बिना किसी चेहरे के एक जोकर की छवि की तरह उपयोगकर्ता उपयोगकर्ता को किसी और के चेहरे को फेंक सकता है?

+0

हां, ओवरले छवि कुछ ऐसा हो सकती है जैसे "कैमरे को लक्षित करें ताकि आपका लक्ष्य का सिर हो जहां क्लोउन का सिर होना चाहिए" – binnyb

+0

उस स्थिति में आपके ओवरले में पर्याप्त "खून बहना" होना चाहिए ताकि आप आसानी से उन्हें फसल कर सकें। आपको अपने सूत्रों को अलग-अलग उन्मुखताओं में भी समायोजित करना होगा। – Lumis

+0

तर्क ... यह एक दर्द है! एक बार मैंने यह कार्य पूरा कर लिया है, तो मैं इस पोस्ट के स्वीकृत उत्तर को अपडेट कर दूंगा। मैं लगातार यहां हूं इसलिए आपको उचित समय में क्रेडिट मिलेगा! – binnyb

संबंधित मुद्दे