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

##照相机

时间: 2024-11-05 03:28:29

android多媒体的相关文章

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

Android多媒体框架图

Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 Video Overlay框架图 Camera HAL演化图

Android多媒体框架对音乐播放器的支持

下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些. 1. MediaScannerReceiver 这个广播接收者在接收到ACTION_BOOT_COMPLETED.ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SCANNER_SCAN_FILE 广播时对SD卡中的图片.音乐和视频文件进行了扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService,扫描的文件类型如下: /* Audio */ addFileType("MP3&q

Android多媒体整体架构图

Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 Video Overlay框架图 Camera HAL演化图

Android多媒体访问

Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(internal.db),一个是存储卡数据库(external-XXXX.db).媒体文件的操作主要是围绕着这两个数据库来进行.这两个数据库的结构是完全一模一样的. Android提供了MediaStore类,该类是一个ContentProvider,管理着设备上自带的和外部的多媒体文件,同时包含着每一个多媒

Android多媒体-播放多媒体时的前台服务

众所周知,一般我们将播放的逻辑都放入service当中,这样就能实现在后台继续播放音乐的功能.后台service被系统回收的概率相对来说比较低,但是这种情况也确实存在. 前台服务是那些被认为用户知道的并且在内存低的时候不允许系统杀死的服务.前台服务必须给状态栏提供一个通知,他被放到了"正在进行中(Ongoing)"标题之下,这就意味着直到这个服务被终止或从前台删除通知才能被解除. 例如,一个播放音乐的音乐播放器服务应该被设置在前台运行,因为用户明确的知道它们的操作.状态栏中的通知可能指

Android多媒体-MediaRecorder 录制音视频

不多说,直接上代码,有详细注释 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaRecorder

基于 VLC 的 Android 多媒体解决方案

前段时间项目中需要在 Android 中播放视频.流媒体.查看监控,就研究了一下 Android 多媒体解决方案. 查找了一下,大致有如下几种: Android MediaPlayer FFmpeg Google ExoPlayer Vitamio VLC Android MediaPlayer 是 Android 内置的播放器,支持格式很有限:3gp mp4,且不支持流媒体. FFmpeg 是一套功能强大的跨平台多媒体解决方案,需要用NDK编译,支持海量格式.流媒体. Google ExoPl

Android多媒体-底层流程简介

先上图,根据图做一个简单介绍 我们讲一下MediaPlayer 应用层的播放器首先调用framework层的MediaPlayer的类,接着FrameWork层会继续调用Native层的MediaPlayer类,然后通过Binder调用MediaPlayerService,MediaPlayerService调用OpenVC库解码成原始的视频流和音频流,视频流通过UI一帧一帧的显示出来,MediaPlayerService将解码后的音频流交给AudioTrack,接着交给AudioFlinger