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();

 

posted on 2017-05-25 18:45  MyCharming  阅读(229)  评论(0编辑  收藏  举报