我正在开发一个应用程序,我可以从相机上传图像到一个事件,我以通常的方式做到了,但是当我根据Exif界面旋转它时我有时会得到OOM错误,这真是令人沮丧,我决定尝试使用JniBitmapOperations library 这似乎工作正常(我不会得到OOM错误),但当试图旋转图像时,它会变得腐败和混乱:/ heres图片JniBitmapOperations旋转导致图像损坏
,你可以看到上面的图片旋转到正确的位置,但所有的损坏 下面一个是原来的
这里是相关的代码部分:
Options options = new Options();
options.inJustDecodeBounds = true;
options.inPreferredConfig = Config.ARGB_8888;
Bitmap srcBitmap = BitmapFactory.decodeFile(tempImageFilePath, options);
options.inSampleSize = calculateInSampleSize(options);
options.inJustDecodeBounds = false;
srcBitmap = BitmapFactory.decodeFile(tempImageFilePath, options);
ImageLoader.getInstance().clearMemoryCache();
ImageLoader.getInstance().clearDiscCache();
final JniBitmapHolder bitmapHolder = new JniBitmapHolder(srcBitmap);
//if we comment this part out, the image comes out fine but not rotated correctly
switch (angleFix) {
case 90:
bitmapHolder.rotateBitmapCw90();
break;
case 180:
bitmapHolder.rotateBitmapCw90();
bitmapHolder.rotateBitmapCw90();
break;
case 270:
bitmapHolder.rotateBitmapCcw90();
break;
}
srcBitmap = bitmapHolder.getBitmapAndFree();
//this is the old way which caused OOM errors occasionally
// Bitmap.createBitmap(srcBitmap, 0, 0, srcBitmap.getWidth(), srcBitmap.getHeight(), m, true);
try {
FileOutputStream out = new FileOutputStream(tempImageFilePath);
srcBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
if (srcBitmap != null) {
GetImageUploadUrl getUrl = new GetImageUploadUrl();
getUrl.execute();
}
}
}
我将不胜感激任何帮助!
好像我有一个bug。奇怪的是,我没有注意到它,并且它在资源上运行良好。现在我想到了它,它看起来像我过去已经修复的一个旧bug。也许我忘了提交。该代码目前仅适用于宽度==高度。很快会解决它并告诉你。 –
非常感谢你! :) –
对不起。因为我已经测试过很多次了,所以我确信你应该责怪。我真的希望我能够重新“捕捉”我所拥有的错误,并在短时间内修复它。 –