android 多媒体,android多媒体

一丶#图形的处理

计算机表示图形资源的方式。

.png 高质量的图片,用于计算机和网络 (文件体积比较小)

>无损的图形压缩算法。

.jpg 良好质量的图片,用于计算机和网络 (文件体积也比较小)

>图形压缩算法,类似rar算法,眼睛精度有限,比较深的红色,稍微淡点红色。

>把相邻空间,类似的颜色同一用同一种颜色表示,降低图片的精度。

.bmp 高质量的图片,用于计算机(文件体积很大)

>表示图片中的每一个点(像素),一个像素一个颜色,一般bmp图形的一个像素点需要3个byte表示

##OOM(out of memory)

内存空间不足

Android一般每一个应用程序都是一个独立的进程,操作系统会给进程创建一个dalvik的虚拟机,虚拟机默认最大堆内存空间16MB,如果应用程序需要的空间大于16Mb 就会抛出oom的异常。

如何解决:

计算机显示图形,实际上显示的图形的每个像素点。

受计算机或者手机屏幕分辨率的限制,如果图片不放大,没法把所有的像素都显示到界面上的。

只是显示了图片的一个缩略图,加载的时候,就没有必要把全部的像素都加载到内存里面。

bitmap 表示的就是图形的每个像素点。 400*800  int[320000]

1. 判断手机的分辨率

2. 获取图片的分辨率

3. 根据比例进行缩放显示

例子:public void loadp_w_picpath(View view) {

// 拿到屏幕的宽度和高度

// 拿到手机的系统管理器

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

// 拿到屏幕的宽度

Display display = wm.getDefaultDisplay();

int screenWidth = display.getWidth();

// 拿到屏幕的高度

int screenHeight = display.getHeight();

// 加载原始图片的大小

Options opts = new Options();

// 此句的含义就是让decodeFile方法不再返回图片本身,而只返回图片的参数信息

opts.inJustDecodeBounds = true;

// 不再返回图片的数据,而是返回图片的大小数据放到opts对象中

//BitmapFactory.decodeFile("/mnt/sdcard/zhaopian.JPG", opts);

BitmapFactory.decodeFile(path, opts);

// 拿到图片的本身大小

// 拿到图片的宽度

int picWidth = opts.outWidth;

// 拿到图片的高度

int picHeight = opts.outHeight;

// 按比例缩小图片

int wc = picWidth / screenWidth;

int hc = picHeight / screenHeight;

// 定义一个变量表示缩放比例

int scale = 1;

if (wc > hc && hc >= 1)

scale = wc;

if (hc > wc && wc >= 1)

scale = hc;

// 设置采样率

opts.inSampleSize = scale;

// 拿到缩放后的图片

// 此句必须设回为false,否则拿不到图片

opts.inJustDecodeBounds = false;

Bitmap copy = BitmapFactory

.decodeFile(path, opts);

iv.setImageBitmap(copy);

System.out.println(path);

}

##计算机图形处理的原理

>计算机表示图形,实际上表示的是图形的每一个像素点

>图形处理其实就是对文件的0011进行数据变化

##图形处理的常用API

>计算机修改图形,并不是直接修改图片的原图(文件),修改的原图在内存空间中的一个副本(拷贝)

* 旋转

matrix.setRotate(30, copyBitmap.getWidth()/2, copyBitmap.getHeight()/2);

* 平移

matrix.setTranslate(30, 50);

* 缩放

matrix.setScale(2.0f, 2.0f);

* 倒影

Matrix matrix = new Matrix();

matrix.setScale(1.0f, -1.0f);

//只有采用post才可以让位置 移动立刻生效

matrix.postTranslate(0, copyBitmap.getHeight());

* 镜面

matrix.setScale(-1.0f, 1.0f);

//只有采用post才可以让位置 移动立刻生效

matrix.postTranslate(copyBitmap.getWidth(), 0);

* 修改图形的颜色

ColorMatrix cm = new ColorMatrix();

cm.set(new float[] {

1, 0, 0, 0, 0,  //red

0, 2, 0, 0, 0,  //green

0, 0, 1, 0, 0,  //blue

0, 0, 0, 1, 0   //透明度

});

paint.setColorFilter(new ColorMatrixColorFilter(cm));

例:附件里面的(简单的美图秀秀和画图工具)

##音频处理

MediaPlayer

* 同步的准备(阻塞,准备的等待操作在主线程,本地资源播放)

* 异步的准备(非阻塞,准备的等待操作在子线程,网络资源播放)

##视频处理

SurfaceView 表面视图

可以在别的线程修改更新UI

双缓冲概念:两个线程共同作用

适合视频播放,适合游戏界面的渲染

SurfaceView重量级控件, 内存开销比较大,cpu开销比较大,

双缓冲切换器创建好了

只有SurfaceView界面用户可见了。才可以执行逻辑。

如果SurfaceView界面用户不可见。资源就会被回收。

##照相机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值