我想在不改变文件大小的情况下旋转图像文件(照片):
我申请轮换:
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);
但是原始文件的大小增加了一倍!!
答案 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应该拥有你需要的所有东西(和大小)。