在我的代碼我在做這樣的事情:爲什麼有時位圖是相同的對象?
public void doStuff() {
Bitmap scaledBitmap = decodeFileAndResize(captureFile);
saveResizedAndCompressedBitmap(scaledBitmap);
Bitmap rotatedBitmap = convertToRotatedBitmap(scaledBitmap);
driverPhoto.setImageBitmap(rotatedBitmap);
if (rotatedBitmap != scaledBitmap) {
scaledBitmap.recycle();
scaledBitmap = null;
System.gc();
}
}
private Bitmap convertToRotatedBitmap(Bitmap scaledBitmap) throws IOException {
ExifInterface exifInterface = new ExifInterface(getCaptureFilePath());
int exifOrientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 0);
float orientationDegree = getRotationDegree(exifOrientation);
Matrix rotateMatrix = new Matrix();
rotateMatrix.postRotate(orientationDegree);
return Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), rotateMatrix, true);
}
一切工作正常,但是當我評論if (rotatedBitmap != scaledBitmap) {
我對使用回收的位圖的錯誤。
Android是否在每次Bitmap.createBitmap
調用創建新的位圖,我怎樣才能避免位圖之間比較呢?
由於'createBitmap(..)'您使用返回不可變的位圖的方法,很可能它實際上是存儲'scaledBitmap'作爲成員,而不是從頭開始創建一個新的位圖。 – harism
其實,還有一個,如果'createBitmap(...)'作爲參數給出返回相同的位圖中-clause。也許你的代碼碰到了這個確切的例子:scaledBitmap == rotatedBitmap'。 [Bitmap.java(http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/graphics/Bitmap.java.htm) – harism
我認爲你正在做的事情錯了這裏。該代碼行'rotatedBitmap!= scaledBitmap'會給你真正的所有您比較兩個對象,而這些都是不primitives.So兩個對象不等於對方time.Because。 – sampathpremarathna