1、Bitmap.Config参数
Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as well as the ability to display transparent/translucent colors
即决定图片像素点的存储,即用图片查看器看图片属性时候的位深参数。
ARGB_4444 每个像素点用2byte表示,A即表示透明度,即ARGB每个属性用4个bits记录,虽然文档推荐换成ARGB_8888,但是有的时候还是需要用这个。- - - - 一切为了内存
ARGB_8888 每个像素点4个byte。也就是说,同样的图片,这种方式存储的,会比上边的大一倍
ALPHA_8 只是用来记录半透明值,而不记录RGB值,目前没有用到过。(用这个值生成的BItmap可以设置在ImageView上,效果挺有意思的... 但是,compress到disk上,发现文件大小为0)
RGB_565 分别用 5个bits 即32位有效值保持R,B,6个bits保存G,则一个像素使用2个byte。没有记录透明层。
因为android中,JPG不会有透明属性,所以JPG类型的文件一般使用RGB_565来存储。而PNG一般会用ARGB_8888/4444来存储,当然也会有565形式。但是要注意的是PNG在调用Bitmp.compress方法的时候,因为PNG是无损存储,则quality参数没有用。但是使用JPEG时候,会把透明层部分压缩掉
一个示例:
InputStream inputStream = getAssets().open("boliu123.png");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
if(bitmap.getConfig()!=null){
Config config = bitmap.getConfig();
Log.i("config", config.name());
if(bitmap.getConfig()==Config.ARGB_8888){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int piexl[] = new int[width*height];
bitmap.getPixels(piexl, 0, width, 0, 0, width, height);
Bitmap bitmap1 = Bitmap.createBitmap(piexl, width, height, Config.ARGB_4444);//一切为了内存
bitmap1.compress(CompressFormat.PNG, 100, os)
}
}