2011-10-04 14 views
8

मैं combine two Bitmap Images पर एक विधि का उपयोग कर रहा हूं और SDCard में लिख रहा हूं। अप्प। एमुलेटर में ठीक काम करता है, लेकिन जब मैं रियल डिवाइस पर में निष्पादित करने के लिए करने की कोशिश की यह इस लाइन cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); एक new Bitmap जिस पर मैं दोनों छवियों कि Canvas का उपयोग कर जोड़ा जा करने के लिए कर रहे हैं आकर्षित करेगा बनाने के लिए है कि कम से Null Pointer Exception थ्रू हुए।दो बिटमैप छवियों के संयोजन में शून्य सूचक अपवाद

अब, combineImages(Bitmap background, Bitmap foreground) में पहला तर्क Bitmap from Camera चित्र और second is the forefround Gallery item है। बिटमैप कैमरा से ली गई एक static Bitmap मुझे लगता है कि केवल एक चीज है कि मुझे मुसीबत में चल रहा है है है। तो, किसी ने मुझे एक तस्वीर तो यह है कि मैं किसी भी मुद्दे जो इसे आगे का उपयोग कर नहीं है Camera से एक temporary भंडारण के रूप में लिया बचाने के लिए एक अच्छा समाधान दे सकते हैं।

public void combineImages(Bitmap background, Bitmap foreground) { 

     Bitmap cs = null; 
     int width = 0, height = 0; 
     width = background.getWidth(); 
     height = background.getHeight(); 
     cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
     Canvas comboImage = new Canvas(cs); 
     comboImage.drawBitmap(background, 0, 0, null); 
     comboImage.drawBitmap(foreground, 100, 300, null); 

     String tmpImg = String.valueOf(System.currentTimeMillis()) + ".png"; 
     OutputStream os = null; 
     try { 
      os = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + tmpImg); 
      cs.compress(CompressFormat.PNG, 100, os); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

यहाँ मेरी Logcat आउटपुट है जब मैं रियल डिवाइस पर की कोशिश की। (एलजी ऑप्टिमस ब्लैक पी-970)

10-04 12:36:08.329: ERROR/AndroidRuntime(16356): FATAL EXCEPTION: main 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356): java.lang.NullPointerException 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.graphics.Bitmap.createBitmap(Bitmap.java:469) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at com.cam.GalleryImageSelected.combineImages(GalleryImageSelected.java:66) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at com.cam.GalleryImageSelected$1.onClick(GalleryImageSelected.java:90) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:874) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.widget.AdapterView.performItemClick(AdapterView.java:294) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.widget.ListView.performItemClick(ListView.java:3387) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2408) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.os.Handler.handleCallback(Handler.java:587) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.os.Looper.loop(Looper.java:123) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):  at dalvik.system.NativeStart.main(Native Method) 
+0

क्या मुझे नीचे वोट के कारण का पता चल सकता है? –

+0

क्या आप वाकई चौड़ाई और लाइन सीएस = Bitmap.createBitmap (चौड़ाई, ऊंचाई, Bitmap.Config.ARGB_8888) में ऊंचाई रहे हैं; 0 से अधिक हैं। बस उस पंक्ति में एक और त्रुटि के बारे में सोचने के लिए प्रतीत नहीं हो सकता है। – blessenm

+0

हाँ, क्योंकि ऊंचाई और चौड़ाई चित्र कैमरे से ली गई से आता है तो जाहिर है कि वे से 0. धन्यवाद अधिक से अधिक कर रहे हैं। –

उत्तर

6

मुझे लगता है कि समस्या बिटमैप का आकार हो सकती है जिसे आप कैमरे से एक तस्वीर ले कर उत्पन्न कर रहे हैं। तो, बेहतर Bitmap.createScaledBitmap() विधि का उपयोग करने का प्रयास करें।

width = getWindowManager().getDefaultDisplay().getWidth(); 
height = getWindowManager().getDefaultDisplay().getHeight(); 

background = Bitmap.createScaledBitmap(background, width, height, true); 

यह डिवाइस की ऊंचाई-चौड़ाई की ऊंचाई-चौड़ाई के अनुसार आपकी छवि को स्केल करेगा। उम्मीद है की यह मदद करेगा।

+0

धन्यवाद, यह समस्या का काम था छवि का आकार पार हो गया था डिवाइस की ऊंचाई चौड़ाई का आकार ... –

+0

मुझे खुशी है..मैं – MKJParekh

+0

मदद कर सकता था कि यह नई जानकारी थी। धन्यवाद – blessenm

4

आप मूल रूप से लाइन आपने संकेत पर एक नल पॉइंटर एक्सेप्शन नहीं मिल सकता है, यह सोचते हैं कि Bitmap सही ढंग से लागू किया जाता है:

cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

createBitmap स्थिर है। Bitmap.Config.ARGB_8888 स्थिर है। चौड़ाई, ऊंचाई इंक हैं।

संभवतः शून्य क्या हो सकता है? क्या आप अपवाद के स्टैक ट्रेस पोस्ट कर सकते हैं? क्या आप लाइन के बारे में निश्चित हैं?

+0

मेरी Logcat उत्पादन चेकआउट कृपया, मैं जो लाइन 66 पर त्रुटि हो रही है कि मैं क्या संकेत दिया। –

+0

बिटमैप एपीआई कक्षा में कार्यान्वयन त्रुटि की तरह लगता है। अन्य लोगों ने एक ही त्रुटि का अनुभव किया है: https://github.com/guardianproject/SecureSmartCam/issues/73 http://forum.xda-developers.com/showthread.php?t=613835 यह एक स्मृति समस्या हो सकती है : देशी बिटमैप बनाने के दौरान, पर्याप्त स्मृति नहीं है, बिटमैप नहीं बनाया गया है और शून्य वापस आ गया है। बिटमैप क्लास जांच नहीं करता है कि वापस लौटाया गया बिटमैप शून्य है, और कुछ पैरामीटर सेट करने का प्रयास करता है। एक छोटी छवि आज़माएं, या विधि को कॉल करने से पहले मेमोरी को खाली करने का प्रयास करें। –

+0

मुझे लगता है कि निश्चित रूप से इसके लिए कुछ समाधान हो सकता है। :( –

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