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界面用户不可见。资源就会被回收。

##照相机

创新互联是一家业务范围包括IDC托管业务,雅安服务器托管、主机租用、主机托管,四川、重庆、广东电信服务器租用,雅安移动机房,成都网通服务器托管,成都服务器租用,业务范围遍及中国大陆、港澳台以及欧美等多个国家及地区的互联网数据服务公司。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻标题:android多媒体-创新互联
本文URL:http://scyanting.com/article/dpiece.html