2013-07-13 8 views
22

मैं लगातार इस समस्या हो रही है और मैं इसके बारे में क्या करना है पता नहीं है का उपयोग करने की कोशिश कर।कैनवस: एक पुनर्नवीनीकरण बिटमैप एंड्रॉयड

मैंने this लाइब्रेरी का उपयोग किया है और जब मुझे फसल की गई छवि मिलती है तो मैं इसे स्थिर चर में सहेजता हूं और अगली गतिविधि में जाता हूं। जब मैं अगली गतिविधि में पहुंचता हूं, तो मैं बिटमैप प्राप्त करने के लिए स्थिर चर का संदर्भ देता हूं और इसे स्केल करने का प्रयास करता हूं। लेकिन यह मुझे त्रुटि देता है।

यहाँ मैं क्या कर रहा हूँ है।

public void buttonCropClick(View view) throws IOException 
{ 
    imageView.setDrawingCacheEnabled(true); 
    imageView.buildDrawingCache(true); 
    Snapshot.CroppedBitmap = imageView.getDrawingCache(true); 
    imageView.setDrawingCacheEnabled(false); 
    startActivity(new Intent(this,RecommendationInfo.class)); 
} 

RecommendationInfo कक्षा में, मैं निम्नलिखित पंक्ति Snapshot.CroppedBitmap = imageView.getDrawingCache(true); में बिटमैप मिल तो मैं स्थिर चर जो मैं अगले गतिविधि में संदर्भ और यह निम्नलिखित कार्य करने के लिए पारित में इस बिटमैप सहेजें।

public static Bitmap scaleDown(Bitmap realImage,boolean filter) { 

    float maxImageSize = HeightToSet; 
    float ratio = Math.min(
      (float) maxImageSize/realImage.getWidth(), 
      (float) maxImageSize/realImage.getHeight()); 
    int width = Math.round((float) ratio * realImage.getWidth()); 
    int height = Math.round((float) ratio * realImage.getHeight()); 

    // Error here 
    Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width,height, filter); 
    return newBitmap; 
} 

मैंने पहले ही bitmap.recycle() पर कॉल करने का प्रयास किया है। मुझे यह समस्या क्यों मिल रही है इसे हल करने के लिए मैं क्या कर सकता हूं? मेरा लॉगकैट यहाँ है।

07-14 03:09:43.713: E/AndroidRuntime(19653): FATAL EXCEPTION: main 
07-14 03:09:43.713: E/AndroidRuntime(19653): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected] 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.graphics.Canvas.throwIfRecycled(Canvas.java:955) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.graphics.Canvas.drawBitmap(Canvas.java:1012) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.graphics.Bitmap.createBitmap(Bitmap.java:462) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:349) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at com.example.Libraries.Snapshot.scaleDown(Snapshot.java:42) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at com.example.androidtestproject.RecommendationInfo.SetRecommendationValues(RecommendationInfo.java:195) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at com.example.androidtestproject.RecommendationInfo.access$5(RecommendationInfo.java:183) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at com.example.androidtestproject.RecommendationInfo$1.onClick(RecommendationInfo.java:154) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.view.View.performClick(View.java:2552) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.view.View$PerformClick.run(View.java:9229) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.os.Handler.handleCallback(Handler.java:587) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.os.Looper.loop(Looper.java:138) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at android.app.ActivityThread.main(ActivityThread.java:3701) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at java.lang.reflect.Method.invokeNative(Native Method) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at java.lang.reflect.Method.invoke(Method.java:507) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
07-14 03:09:43.713: E/AndroidRuntime(19653): at dalvik.system.NativeStart.main(Native Method) 
07-14 03:09:45.515: E/TAG(20039): End of input at character 0 of 
+0

क्या त्रुटि यह आपके द्वारा दिया गया? – Alamri

+0

मैंने प्रश्न अपडेट किया है कृपया – Mj1992

+0

देखें कि आपका बिटमैप कहीं भी रीसाइक्लिंग किया गया है, आप इसे रीसायकल करने के बाद बिटमैप को कॉल नहीं कर सकते हैं। कृपया देखें कि क्या आप बिटमैप रीसाइक्लिंग कर रहे हैं या नहीं, दूसरी गतिविधि शुरू करने से पहले। – k0sh

उत्तर

37

स्थिर चर पर जाने से पहले बिटमैप की प्रतिलिपि बनाएँ।

Snapshot.CroppedBitmap = imageView.getDrawingCache(true); 

Snapshot.CroppedBitmap = Bitmap.createBitmap(imageView.getDrawingCache(true)); 

लिए यह आवश्यक है कि imageView अपने ड्राइंग कैश रीसाइक्लिंग है जब अब अच्छा अभ्यास के रूप में की जरूरत है बहुत संभावना है। इसे कॉपी करके, आप ImageView को ट्रैश किए गए बिटमैप का संदर्भ रखते हैं। बस इसकी एक प्रति बनाएं कि आप स्वयं को प्रबंधित कर सकें!

+0

thnx alot man की कोशिश की, आपका समाधान संक्षिप्त और सटीक है :) – Mj1992

+0

आशा है कि इससे मदद मिलेगी। चीयर्स! – AStupidNoob

+0

धन्यवाद ... मदद की मुझे भी ... – Vamshi

3

आप पहली बार स्रोत चित्र को कॉपी करने की जरूरत है:

Bitmap bitmap = webview.getDrawingCache(); 
if (bitmap != null) { 
     Snapshot.CroppedBitmap.setImageBitmap(bitmap.copy(bitmap.getConfig(), false)); 
} 
  • जरूरी स्रोत बिटमैप की एक प्रतिलिपि बनाने नहीं होगा वही त्रुटि जिसके परिणामस्वरूप createBitmap का उपयोग करना।
+0

java.lang.IllegalStateException के लिए क्या बदलना है: एक पुनर्नवीनीकरण बिटमैप की प्रतिलिपि नहीं बना सकता – joecizac

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