不能只是缩小图片大小,而是要把体积降下来,几百K的图片压缩成几K或几百B.
A1:
压缩图片质量:
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, fos);
其中的quality为0~100, 可以压缩图片质量, 不过对于大图必须对图片resize
这个是等比例缩放:
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
newBitmap = Bitmap.createBitmap(oldBitmap, 0, 0, width, height, matrix, true);//用距阵的方式缩放
这个是截取图片某部分:
bitmap = Bitmap.createBitmap(bitmap, x, y, width, height);
这几个方法都是针对Bitmap的, 不过鉴于Bitmap可以从file中读取, 也可以写入file.
这是我知道Android自带库里中唯一可以缩放和压缩的图片方法.
--------------------------------------------------------------------------------------------------------------------------------------------------
A2:
内存溢出,你这么处理就可以。用完及时回收
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16*1024];
Bitmap bitmapImage = BitmapFactory.decodeFile(path,opt);
A:很多网友可能发现了Android的Bitmap对象无法保存成为一个bmp文件,即提供的方法只有compress(Bitmap.CompressFormat format, int quality, OutputStream stream) ,可以存为png和jpg,png可能还好说,但是jpg是有损压缩会降低图片的质量,其实Google还提供了一个API在Bitmap类,通过copyPixelsToBuffer(Buffer dst) 这个方法来解决,Buffer类型,和前几天我们说到的NIO中的ByteBuffer处理方式一样,需要说明的是java中的Buffer在内存中是连续成块的,同时底层有C++支持效率还是很高的。
通过copyPixelsToBuffer(Buffer dst) 方法将会返回一个RGB8888格式的DIB文件,DIB位图和设备无关,这里Android123提醒大家,如果想显示出位图,还需要将其加上位图的文件头才行。
Q: