2013-07-13 17 views
22

Sürekli olarak bu sorunu yaşıyorum ve bu konuda ne yapacağımı bilmiyorum.Tuval: bir geri dönüştürülmüş bitmap android kullanmaya çalışıyorum

this kitaplığını kullandım ve kırpılmış görüntüyü aldığımda onu statik bir değişkene kaydedip bir sonraki etkinliğe geçiyorum. Bir sonraki etkinliğe vardığımda, bitmapi elde etmek için statik değişkene başvurup ölçeklendirmeye çalışıyorum. Ama bana hata veriyor.

İşte yaptığım şey.

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 sınıfta, ben o zaman ben bir sonraki aktivitede başvurmak ve aşağıdaki işleve geçmek statik değişkende bu bitmap kaydedin aşağıdaki satırı Snapshot.CroppedBitmap = imageView.getDrawingCache(true); bitmap olsun.

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; 
} 

Zaten bitmap.recycle() aramayı denedim. Neden bu problemi alıyorum ki çözmek için ne yapabilirim? İşte benim logcat'ım.

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

Size ne gibi bir hata verdi? – Alamri

+0

Soruyu güncelledim lütfen – Mj1992

+0

kontrol edin bitmap bir yerde geri dönüşümlüdür, geri dönüştürdükten sonra bitmap'i arayamazsınız. diğer aktiviteyi başlatmadan önce bitmapi geri dönüştürüp dönüştürmediğinize bakın. – k0sh

cevap

37

Bitmap'i statik değişkene geçirmeden önce kopyalayın.

Snapshot.CroppedBitmap = imageView.getDrawingCache(true); 

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

için Artık iyi uygulama olarak gerektiğinde imageview onun çizim önbelleği geri dönüşüm olduğunu çok muhtemeldir. Bunu kopyalayarak, ImageView'ın çöktüğü bitmap'e bir referans tutarsınız. Sadece kendinizin yönetebileceği bir kopyasını yapın!

+0

thnx alot man denedim, çözümün özlü ve doğru :) – Mj1992

+0

Umut ettim. Şerefe! – AStupidNoob

+0

Teşekkürler ... bana yardımcı oldu ... – Vamshi

3

Önce kaynak görüntüyü kopyalamak gerekir:

Bitmap bitmap = webview.getDrawingCache(); 
if (bitmap != null) { 
     Snapshot.CroppedBitmap.setImageBitmap(bitmap.copy(bitmap.getConfig(), false)); 
} 
  • mutlaka aynı hatayı sonuçlanan kaynak bitmap bir kopyasını oluşturmak olmayacak CreateBitmap kullanma.
+0

java.lang.IllegalStateException için değiştirmem gerekenler: Geri dönüştürülmüş bir bitmap kopyalanamıyor – joecizac

İlgili konular