如何在没有内存exception的情况下从“onPictureTaken”旋转图片?

我在那里看过很多post? 但我找不到正确答案。

我试着这样做:

@Override public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) { try { Bitmap bitmap = BitmapFactory.decodeByteArray(paramArrayOfByte, 0, paramArrayOfByte.length); int width = bitmap.getWidth(); int height = bitmap.getHeight(); FileOutputStream os = new ileOutputStream(Singleton.mPushFilePath); Matrix matrix = new Matrix(); matrix.postRotate(90); Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, false); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, os); os.close(); ... 

有没有办法旋转图片,而不使用BitmapFactory? 我想要旋转图片而不会损失质量!

也许您可以根据需要使用Camera.setDisplayOrientation拍摄已旋转的照片? 检查Android相机旋转 。 此外,研究Camera.Parameters.setRotation()。 其中一种技术应该适合你。

否则你的代码看起来很好,除了在Bitmap.compress上使用参数95,你需要使用100进行无损压缩。

为避免出现内存不足exception,请使用Camera.Parameters.setPictureSize()获取较低分辨率的图片(例如3Mpx)。 即你真的需要8Mpx照片吗? 确保使用Camera.Parameters.getSupportedPictureSizes()来确定设备支持的大小。