多媒体编程(一)

文本、图片、音频、视频
图片在计算机中的大小
图片的大小=图片的总像素*每个像素占用的大小
单色位图:只能表示两种颜色,只用两个数字,只用一个长度为1的二进制数字就可以表示了,每个像素占用1/8
个字节
16色位图:能表示16钟颜色
         需要16个数字:0-15,0000-1111,每个像素占用1/2字节(1字节=8位)
256色位图:能表示256中颜色00000000-11111111,每个像素占用一个字节
24位位图:每个像素占3个字节(24位)
R:0-255,需要一个长度为8的二进制数,占用1个字节
G:0-255,需要一个长度为8的二进制数,占用1个字节
B:0-255,需要一个长度为8的二进制数,占用1个字节


加载大图片
计算机把图片所有信息全部解析出来,并保存在内存中。
Android保存保存图片像素信息,使用ARGB保存的,每个像素会占用四个字节
例:手机屏幕320*480,总像素:153600
    图片宽高2400*3200,总像素:7680000
2400/320=7;3200/480=6

BitmapFactory.Options
Option opt=new Option(); 解析图片时所需要的对象都封装在这个对象中

示例代码如下:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(path, options);
这段代码之后,options.outWidth 和 options.outHeight就是我们想要的宽和高了。
有了宽,高的信息,我们怎样在图片不变形的情况下获取到图片指定大小的缩略图呢?
比如我们需要在图片不变形的前提下得到宽度为200的缩略图。
那么我们需要先计算一下缩放之后,图片的高度是多少 
int height = options.outHeight * 200 / options.outWidth;
options.outWidth = 200;
options.outHeight = height; 
options.inJustDecodeBounds = false;
Bitmap bmp = BitmapFactory.decodeFile(path, options);
image.setImageBitmap(bmp);
这样虽然我们可以得到我们期望大小的ImageView
但是在执行BitmapFactory.decodeFile(path, options);时,并没有节约内存。要想节约内存,还需要用到
BitmapFactory.Options这个类里的 inSampleSize 这个成员变量。
我们可以根据图片实际的宽高和我们期望的宽高来计算得到这个值。
inSampleSize = options.outWidth / 200;
另外,为了节约内存我们还可以使用下面的几个字段:
options.inPreferredConfig = Bitmap.Config.ARGB_4444;    // 默认是Bitmap.Config.ARGB_8888
options.inPurgeable = true;
options.inInputShareable = true;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值