사용자가 카메라에서 이벤트로 이미지를 업로드 할 수있는 앱을 개발하고 있는데, 일반적인 방법으로 수행했지만 Exif 인터페이스에 따라 회전하는 부분에 도달했습니다. 때로는 실망 스럽지만 OOM 오류가 발생하기도했는데, 잘 작동하는 것처럼 보였던 JniBitmapOperations library 을 사용하기로 마음 먹었습니다.하지만 이미지를 회전 시키려고하면 엉망이되어 버렸습니다./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();
}
}
}
내가 감사하겠습니다 :위의 올바른 위치로 회전 된 사진을 볼 수 있지만 아래의 하나가 여기에 원래
모든 손상 입니다 수있는 관련 코드의 일부입니다 어떤 도움이라도!
같다 :
여기에 코드입니다. 이상하게도 나는 그것을 알아 채지 못했고 자원으로도 잘 작동했다. 이제 생각해 보면, 과거에 이미 수정 한 오래된 버그처럼 보입니다. 어쩌면 내가 커밋하는 걸 잊었을거야. 코드는 현재 width == height 인 경우에만 작동합니다. 곧 고칠 것이고 그것에 대해 말해 줄 것입니다. –
정말 고마워요! :) –
죄송합니다. 정말 여러 번 테스트 해 봤기 때문에 당신이 탓할 것이라고 확신했습니다. 나는 정말로 내가 가지고 있던 버그를 "다시 잡아"짧은 시간에 고칠 수 있기를 바란다. –