旋转图像文件而不更改文件大小

问题描述

| 我想旋转图像文件(照片)而不更改文件大小: 我用Bitmap.decodeFile创建一个位图 我应用轮换:
Matrix matrix = new Matrix();
matrix.postRotate(90);
bitmap = Bitmap.createBitmap(bitmap,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
我将位图保存到一个文件中:
bitmap.compress(CompressFormat.JPEG,100,stream);
但是我原始文件的大小增加了一倍!     

解决方法

您加载的图像以某种格式(例如JPEG)编码,并具有一定的压缩质量(更好的质量等于更大的文件大小)。旋转后保存时,您指定的格式和压缩质量可能完全不同,因此大小也有所不同。 我认为除非输入和输出文件均为未压缩的位图,否则没有任何方法可以保证相同的大小,但您至少可以尝试找出原始图像使用的格式和质量,然后使用这些格式和质量。使用bitmap.compress再次保存文件时的设置。那应该至少给您一个文件大小。     ,除了压缩格式外,请尝试使用与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应该具有您需要的所有内容(和大小)。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...