安卓图片和颜色

唉唉唉,好记性比不上烂笔头,这句话还是非常有道理的,很多之前学的我发现又忘记了,所以及时做笔记是必不可少的!悲剧的是,CSDN博客怎么没有自动保存功能,刚才写了一下午的笔记,一不小心点了别的地方,再回来发现文章已经清空了,哭。。。。。。。。。。。。


Windows默认采用bitmap(位图,bmp)保存图片,每个像素点用一个颜色值来表示,安卓也是这样,每个像素点颜色用#FFRRGGBB的形式来表示,前两位表示透明度,FF表示不透明,00表示透明,一个像素点的颜色需要32位,用一个int值来表示,4个字节。

图片加载进手机内存时,所占内存大小与图片大小无关,而取决于图片的分辨率,安卓手机一般默认VM heap(dalvik 虚拟机堆内存)大小为16M,也有一些配置高的手机堆内存大于16M,屏幕分辨率越大,堆内存应该也越大。堆内存大小表示一个应用程序默认可以申请的内存大小,这也是安卓手机比ios卡的原因之一。当图片分辨率特别大时,可能会造成内存溢出,所以需要将图片压缩。bmp一般占空间比较大,JPG是有损压缩。


public class MainActivity extends Activity {
private ImageView iv;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
}


public void click(View view){
//相当消耗内存资源 根据图片的分辨率而定
// Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg");
// iv.setImageBitmap(bitmap);

//1.得到屏幕的宽高信息
WindowManager wm = getWindowManager();
int screenWidth = wm.getDefaultDisplay().getWidth();
int screenHeight = wm.getDefaultDisplay().getHeight();
System.out.println("屏幕宽高:"+screenWidth+"-"+screenHeight);


//2.得到图片的宽高。
BitmapFactory.Options opts = new Options();//解析位图的附加条件
opts.inJustDecodeBounds = true;//不去解析真实的位图,只是获取这个位图的头文件信息
Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg", opts);
int bitmapWidth = opts.outWidth;
int bitmapHeight = opts.outHeight;
System.out.println("图片宽高: "+bitmapWidth+"-"+bitmapHeight);

//3.计算缩放比例
int dx = bitmapWidth/screenWidth;
int dy = bitmapHeight/screenHeight;
int scale = 1;
if(dx>dy&&dy>1){
System.out.println("按照水平方法缩放,缩放比例:"+dx);
scale = dx;
}

if(dy>dx&&dx>1){
System.out.println("按照垂直方法缩放,缩放比例:"+dy);
scale = dy;
}
//4.缩放加载图片到内存。
opts.inSampleSize = scale;//缩放比例
opts.inJustDecodeBounds = false;//真正的去解析这个位图。
bitmap = BitmapFactory.decodeFile("/mnt/sdcard/photo.jpg", opts);
iv.setImageBitmap(bitmap);
}
}

 

posted @ 2015-01-29 18:09  berylqliu  阅读(183)  评论(0)    收藏  举报