标签:文件信息 bitmap length code sam get 表示 现象 图片加载
1.计算机图形的表示方式:
在计算机中,图片是采用位图形式来实现的
单色位图(bmp):(白色)200*200=4万个像素点,8个字节是一byte,大概有5000byte,因为图片的头信息,和事件什么的都保存在图片里,实际图片大小为5.多kb(黑白,1个byte可以表示8个像素点0表示黑色,1表示白色)
256色位图,每一个像素点都有256中颜色,(256个组合不是256位,需要2的8次方个组合需要8位表示)2的8次方,故一个像素占8位,即一个字节.
计算计算机图片的大小:宽*高*(位图)位数/8
注意①Android中默认的位图属性位ARGB_8888,是32位位图,一个像素占用4个字节,在工作中我们需要使用RGB_565,是16位位图,一个像素占用2个字节
注意②矢量图到Android5.0之后才支持,所以开发中一般使用的是位图
|--位图:会随着图片的放大缩小,像素失真,内存占用大
|--矢量图:放大缩小不会失真,内存占用小
多媒体是多种媒体的继承,主要包括文本,音频,视频,动画...
二:加载图片到内存
BitmapFactory.decodeFile("mnt/sdcard/big.jpg");
//安卓下默认32位位图,argb各占一个byte,故是32位位图
加载大图异常:OOM(out of memory)1.69M(一个像素要4个byte表示,实际大小是宽高*4)的图片要申请15.6M的内存而android中一个应用程序最大16M内存
三:加载大图
method1
1.创建一个现象条件Option option = new O
2.设置采样率option.inSampleSize=4宽高分别为原来的1/4
method2
得到图片的宽高信息1
ExifInterface exif = new ExifInterface(Environment.getExternalStorageDirectory()+"/big.jpg");
//获取图片的宽高,只能用于jpg图片的宽高(头文件信息,)
int width = exif.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 0);获得宽
int height = exif.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, 0);获得高
//图片宽高获取2
Options opts= new Options();//创建选项条件
opts.isJUstDecodeBounds=true;//只读取图片的头文件信息,不会加载到内存
//加载图片之前:opts.isJUstDecodeBounds=false;再将图片加载到内存,可以保证不管是什么图片都可以获取图片的宽高,计算出缩放比例
opts.outWidth;
opts.outHeight;//处理前宽高
//获取屏幕的宽高
get systemService(Window_Service);返回对象WindowManger wm
wm.getDefaultDisplay().getWidth();//获取屏幕的宽,高同样
wm.getDefaultDisplay().getHeight();//获取屏幕的宽,高同样
创建一个现象条件Option option = new Option();
设置采样率option.inSampleSize=4宽高分别为原来的1/4(图片缩放的唯一标准跟据屏幕宽高和图片宽高设置采样比)//默认1,,,,4-8之间以4为准.只能2的n次方
BitmapFactory.decodeFile(图片路径,option);//造成OOM的关键步骤
bitmap.getWidth();
bitmap.getHeight();获得缩放后,图片的宽高
method2,获取屏幕的宽高
**通过上下文拿到
getresource().getDisplayMetrics();
,widthPixels;
.heightPiels;
//计算缩放比例
图片宽度/屏幕宽度>图片高度/屏幕高度?,选择大的
四:图片的处理
用代码编辑图片,最好处理的是图片在内存库中的拷贝,不去处理原图
//原图
Bitmap srcBitmap = BitmapFactory.decodeFile(mnt/.jpg)
iv_src.setImageBitmap(srcBitmap);
//拷贝原图
//创建一个和原图一样大小的空白画布
Bitmap copyBitmap = Bitmap.createBitmap(srcBitmap.getWidth(),srcBitmap.getHeight(),srcBitmap.getConfig());//创建画板
Canvas canvas = new Canvas(copyBitmap);
//创建画笔
Paint paint = new Paint();
paint.setColor();
Matrix matrix = new Matrix();
标签:文件信息 bitmap length code sam get 表示 现象 图片加载
原文地址:http://www.cnblogs.com/mycharming/p/6905423.html