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

时间:2012-08-09 12:44:13

标签: android bitmap bitmapfactory

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

我尝试做一些事情:

@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?我希望旋转图片而不会降低质量!

1 个答案:

答案 0 :(得分:4)

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

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

为避免内存不足异常,请使用Camera.Parameters.setPictureSize()拍摄较低分辨率的照片(例如3Mpx)。即你真的需要8Mpx照片吗?请务必使用Camera.Parameters.getSupportedPictureSizes()来确定设备支持的尺寸。