在不更改文件大小的情况下旋转图像文件

时间:2011-05-25 12:51:35

标签: android image rotation

我想在不改变文件大小的情况下旋转图像文件(照片):

  • 我用Bitmap.decodeFile创建一个位图
  • 我申请轮换:

    Matrix matrix = new Matrix();
    matrix.postRotate(90);
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    
  • 我将位图保存到一个文件中:

    bitmap.compress(CompressFormat.JPEG, 100, stream);
    

但是原始文件的大小增加了一倍!!

2 个答案:

答案 0 :(得分:4)

您加载的图像以特定格式(例如JPEG)编码并具有一定的压缩质量(其中更好的质量等于更大的文件大小)。在旋转后保存它时,您指定的格式和压缩质量可能完全不同,因此尺寸差异很小。

除非输入和输出文件都是未压缩的位图,否则我认为没有任何方法可以保证相同的大小,但您至少可以尝试找出原始图像使用的格式和质量,使用bitmap.compress再次保存文件时使用这些设置。这应该至少在同一个球场给你一个文件大小。

答案 1 :(得分:0)

除了压缩格式之外,尝试使用与src图像相同的配置创建位图。我建议使用RGB_565:http://developer.android.com/reference/android/graphics/Bitmap.Config.html

这将导致更好的值作为默认值。

mCanvas = new Canvas();
mBitmap = Bitmap.createBitmap(this.width, this.height,
    Bitmap.Config.RGB_565);
mCanvas.setBitmap(mBitmap);

现在,如果您对mCanvas进行任何思考,它将保存在位图中:

mCanvas.save();
mCanvas.translate or roate
mCanvas.drawBitmap(<your real bitmap here>)
mCanvas.restore();

现在mBitmap应该拥有你需要的所有东西(和大小)。