Android 图片常见问题集锦

来源:互联网 发布:快速注册淘宝帐号 编辑:程序博客网 时间:2024/06/06 12:49
Q:加载时图片时有一些图片太大,导致内存溢出,想把这些图片压缩成一个缩略图,该怎么做?

不能只是缩小图片大小,而是要把体积降下来,几百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);


Q:Bitmap如何保存成为一个bmp文件:

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:

Android缩放drawable Matrix

from: http://blog.csdn.net/infsafe/article/details/5482194
原创粉丝点击