2013-03-07 11 views
11

मैं जो कर रहा हूं वह कैमरे से canvas पर एक छवि खींच रहा है, फिर view को bitmap में एक छवि युक्त कनवर्ट करें और इसे शीर्ष पर खींचें कैनवास। फिर अंतिम bitmap बाहरी संग्रहण में सहेजा जाता है।कैमरे पर कब्जा कर लिया गया छवि के ऊपर किसी छवि को देखने या देखने के लिए कैसे करें

समस्या canvas सहेजी गई छवि आकार के बजाय पूर्वावलोकन विंडो आकार में स्वयं आकार का प्रतीत होता है। , विभिन्न आकारों की वजह से

 Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0, 
       imageData.length, options); 
     Bitmap mutableBitmap = myImage.copy(Bitmap.Config.ARGB_8888, true); 

     Paint paint = new Paint(); 
     Canvas canvas = new Canvas(mutableBitmap); 

     view.setDrawingCacheEnabled(true); 
     viewCapture = Bitmap.createBitmap(view.getDrawingCache()); 
     view.setDrawingCacheEnabled(false); 
     canvas.drawBitmap(viewCapture, 0, 0, paint); 

     fileOutputStream = new FileOutputStream(dir + "/" + imgName + ".jpg"); 

     BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
     mutableBitmap.compress(CompressFormat.JPEG, quality, bos); 

इस पर कब्जा कर लिया छवि के शीर्ष पर बिटमैप बचाता है, लेकिन:

यहाँ मेरी गतिविधि कक्षा में बात यह है कि कैमरा छवि के शीर्ष पर कब्जा कर लिया दृश्य विलय है इसके बाएं हाथ के कोने में ऑफसेट।

मैं ऐसा करके विभिन्न आकारों की स्थापना कर रहा हूँ मेरी surfaceChanged में निम्नलिखित

Camera.Parameters p = mCamera.getParameters(); 
    Camera.Size myBestPreviewSize = getBestPreviewSize(w, h, p); 
    p.setPreviewSize(myBestPreviewSize.width, myBestPreviewSize.height); 
    Camera.Size myBestPictureSize = getBestPictureSize(w, h, p); 
    p.setPictureSize(myBestPictureSize.width, myBestPictureSize.height); 

जाहिर है ऐसा करके, मैं पूर्वावलोकन विंडो के लिए सबसे अच्छा संकल्प, और कब्जा कर लिया छवि के लिए सबसे अच्छा संकल्प हो रही है। मेरा मानना ​​है कि यह मुद्दा दो अलग-अलग प्रस्तावों के कारण हुआ है, लेकिन यह पता लगाना कि मैं कहां फंस गया हूं।

इस छवि पूर्वावलोकन खिड़कियों पता चलता है:

उम्मीद है कि निम्न छवियाँ बेहतर समस्या का वर्णन होगा। जैसा कि आप देख सकते हैं कि एंड्रॉइड छवि के मृत मध्य में है। enter image description here

मैं ऊपर की छवि को कैप्चर करता हूं और यह सहेजा जाता है। मैं इसे देखने के लिए जाता हूं और यह ऐसा लगता है: enter image description here

नोटिस एंड्रॉइड अब मध्य में नहीं है, यह शीर्ष बाएं कोने में है।

एक और परीक्षण के रूप में, मैं एंड्रॉयड हिस्सा रास्ता बंद स्क्रीन के रूप में अगले कैमरा पूर्वावलोकन enter image description here

मैं ऊपर दिखाए गए के रूप में वास्तव में छवि पर कब्जा में दिखाया गया ले जाया गया है, और यह देखने की बात है, एंड्रॉयड बंद बिल्कुल कट जाता है यह कैसे पूर्वावलोकन विंडो में था, लेकिन फिर से अपने शीर्ष बाएं कोने में जब यह पूर्ण स्क्रीन होना चाहिए enter image description here

+0

यदि आप Sandbox.java को संपादित कर सकते हैं, तो आप getTransformedBitmap() विधि बनाने का प्रयास कर सकते हैं। पैरामीटर के रूप में नए बिटमैप को पास करने के लिए इसे केवल एक नया बिटमैप और एक नया कैनवास बनाना होगा। फिर अपने कैनवास पर ड्रॉ() को कॉल करें और बिटमैप वापस करें।यह view.getDrawingCache() का उपयोग करने से बेहतर काम कर सकता है। – thomas88wp

+0

@ thomas88wp मैंने आपकी टिप्पणी को एक बार फिर आप का पालन करने की कोशिश करनी होगी। मैं नया बिटमैप कैसे बनाऊंगा? क्या आप मेरे लिए थोड़ा और विस्तार कर सकते हैं? आपकी सहायता की सराहना! – Badams

+0

भ्रमित टिप्पणी के लिए खेद है। अपने स्क्रीनशॉट को देखते हुए, मैं कुछ कोड के साथ एक अलग समाधान का सुझाव देने जा रहा हूं (नीचे देखें)। – thomas88wp

उत्तर

4

बिटमैप कैमरा से लिया गया बड़े पैमाने पर (2000 + पिक्सल चौड़ा) होने जा रहे हैं। आपका SurfaceView जहां आप छवि खींचते हैं, उतना ही बड़ा है जितना आपके डिवाइस रिज़ॉल्यूशन (~ 1000px चौड़ा)। जब आप एक को दूसरे पर खींचते हैं, तो आपको इसे स्केल करने की आवश्यकता होती है, या यह 1/2 आकार का आकार समाप्त हो जाएगा (जैसा कि आपके स्क्रीनशॉट में है)। यहां बताया गया है कि मैं आपके कोड को कैसे संशोधित करूंगा।

view.setDrawingCacheEnabled(true); 
viewCapture = Bitmap.createBitmap(view.getDrawingCache()); 
view.setDrawingCacheEnabled(false); 
//Source Rect sized to the surface view. 
Rect src = new Rect(0, 0, viewCapture.getWidth(), viewCapture.getHeight()); 
//Destination RectF sized to the camera picture 
RectF dst = new RectF(0, 0, myImage.getWidth(), myImage.getHeight()); 
canvas.drawBitmap(viewCapture, src, dst, paint); 

मैं तुम्हें कैमरा मापदंडों और आकार निर्धारित करने के लिए कुछ प्रयास करना पता है, लेकिन या तो यह काम नहीं कर रहा है या आप एक अलग दृष्टिकोण की आवश्यकता है। मुझे लगता है कि यह काम करना चाहिए, यद्यपि। आपके दूसरे स्क्रीनशॉट, जहां एंड्रॉइड लड़का दोनों छवियों में फिसल गया है, सुझाव देता है कि यह सिर्फ एक साधारण स्केलिंग समस्या है।

आशा है कि मदद करता है!

+0

बिल्कुल मुझे क्या चाहिए! धन्यवाद! – Badams

+0

अरे @ बैडम्स, क्या आप कोड साझा कर सकते हैं .. :) –

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