您的位置:华清远见教育科技集团 >> Android资料 >> Android 2D图像处理基本接口  
 
Android 2D图像处理基本接口
分享到:

在Android中,图像主要分为两部分:2D图像和3D图像,2D图像的实现主要位于android.graphics、android.graphics.drawable和android.view.animation、android. animation等包中,特别说明的是,Android有一种名为“NinePatch”、后缀为.9.png的图像形态,可以支持图像的特定缩放,对开发通用应用的开发者而言特别需要关注。如果希望制作NinePatch图像,Android提供了draw9patch工具进行支持。3D图像是基于OpenGL ES来实现的,增加了部分Android接口,本文重点介绍的是2D图像的应用。

关于图像的处理,相关的接口主要位于android.graphics和android.graphics.drawable两个包中。主要的类包括:Bitmap、BitmapFactory、Camera、Picture、AnimationDrawable、BitmapDrawable、PictureDrawable、RotateDrawable 、ScaleDrawable等。

关于动画的处理,相关的接口主要位于android.view.animation和android.animation中,主要的类包括ValueAnimator、ObjectAnimator、AnimatorSet、Evaluators、Interpolators、AnimationSet、Animation 、AnimationDrawable等。

1.Bitmap

Bitmap类提供了图像的基本操作,如获取图像基本信息、像素操作等。常用的方法包括:
        getHeight()        //获取高度
        getWidth()        //获取宽度
        getPixel(int x, int y)        //获取某一点的像素
        setPixel(int x, int y, int color)        //设置某一点的像素
        writeToParcel(Parcel p, int flags)        //将图像写入Parcel
        createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)        //创建图像

Bitmap支持的RGB格式在Bitmap.Config中定义,目前支持的RGB格式包括ALPHA_8、RGB_565、ARGB_4444、ARGB_8888等。

2.BitmapFactory

BitmapFactory类对开发者从文件、流、字节组、资源文件中解码图像提供了支持。常用的方法包括:
        decodeByteArray(byte[] data, int offset, int length)        //从字节码中解码
        decodeFile(String pathName)        //从文件中解码
        decodeStream(InputStream is)        //从输入流中解码
        decodeResource(Resources res, int id)         //从资源文件中解码

另外,和BitmapFactory经常配合使用的还有BitmapFactory.Options类,其可以配置将一个图像读到内存中的方式。BitmapFactory.Options类的用法如下:
        Options opts = new BitmapFactory.Options();
        opts.inDither = true;
        opts.inPreferredConfig = Bitmap.Config.RGB_565;
        mWood = BitmapFactory.decodeResource(getResources(), R.drawable.wood, opts);

3.Camera

此Camera非摄像头,而是位于android.graphics包装的一个图像类,Camera类主要用来执行旋转操作。常用的方法包括:
        rotateX(float deg)        //X轴旋转
        rotateY(float deg)        //Y轴旋转
        rotateZ(float deg)        //Z轴旋转
        translate(float x, float y, float z)        //X、Y、Z轴3个方向旋转

4.Picture

    Picture类主要用于绘制图像。其常用的方法为:
        beginRecording(int width, int height)    //开始绘制
        endRecording()    //结束绘制
        createFromStream(InputStream stream)    //从流中创建
        writeToStream(OutputStream stream)    //将图像写入流

5.AnimationDrawable

AnimationDrawable常用于实现帧动画,通常用于设置动态背景。其常用的方法为:
        addFrame(Drawable frame, int duration)        //向动画中添加一帧
        getFrame(int index)        //获取动画中的一帧
        isRunning()        //判断动画是否正在播放
        setOneShot(boolean oneShot)        //设置是否循环播放
        setVisible(boolean visible, boolean restart)        //设置可视性
        start()        //播放动画
        stop()        //停止播放动画
        AnimationDrawable播放的图像集通常由AnimationSet定义。

6.BitmapDrawable

BitmapDrawable封装了一个Bitmap图像,开发者可以从一个文件路径、输入流、XML 加载一个Bitmap对象。

从BitmapDrawable中获取Bitmap图像的方法很简单,具体如下:
        Bitmap bitmap = bitmapDrawable.getBitmap();

从资源文件中获取BitmapDrawable对象的方法如下:
        InputStream source = getResources().openRawResource(R.raw.testimage);
        BitmapDrawable bitmapDrawable = new BitmapDrawable(source);

BitmapDrawable继承于Drawable,Drawable抽象一点说,是一个可以渲染的对象,通常可以从中抽取资源渲染到屏幕上,Drawable可以对Bitmap、Nine Patch、Shape、Layers、States、Levels、Scale等对象进行封装。可以设置渲染对象的透明度、边界(bounds)、颜色过滤器(colorFilter)等。是一个十分强大的类。

7.PictureDrawable

PictureDrawable封装了一个图像。可以设置透明度、图像、颜色过滤器、是否去抖等。下面是PictureDrawable的一个使用实例:
        Picture picture = new Picture();
        Canvas recodingCanvas = picture.beginRecording(100, 200);
        recodingCanvas.drawARGB(255, 0xa, 0xc, 0xb);
        picture.endRecording();
        pictureDrawable.setPicture(picture);
        pictureDrawable.setBounds(0, 0, 100, 200);

8.RotateDrawable

RotateDrawable用于旋转其他的基于Drawable的类。常用于补间动画中,在xml配置文件中作为元素出现。RotateDrawable可以监听到旋转对象的边界、等级(level)、状态的变化。

9.ScaleDrawable

ScaleDrawable用于改变其他的基于Drawable的类的大小。和RotateDrawable一样,常用于补间动画中,在xml配置文件中作为< scale>元素出现。ScaleDrawable可以监听到缩放对象的边界、等级(level)、状态的变化。

10.Matrix

Matrix是一个3×3的矩阵类,用于转换坐标,在图像处理方面,主要用来实现图像的缩放、旋转、倾斜(skew)等特效。默认情况下构造的是单位矩阵。假设源坐标为(x,y,z),目标坐标为(X,Y,Z)。而转换矩阵为:

则目标坐标和源坐标的换算公式如下:
        X = x+2y+3z;
        Y= 4x+5y+6z;
        Z= 7x+8y+9z;

11.ValueAnimator

ValueAnimator是在Android 3.0中引入的,常用于实现属性动画。ValueAnimator仅定义了目标对象的属性随时间变换的规则,但不能通知目标对象相应的属性已经发生了变化,如果希望能够监听ValueAnimator定义的属性的变化,需要创建监听器。Animator.AnimatorListener()监听器能够监听到动画的开始、结束、重复和取消,ValueAnimator.AnimatorUpdateListener()则更细心,能够监听到动画的每一帧的播放。

12.ObjectAnimator

ObjectAnimator是在Android3.0中引入的,常用于实现属性动画。ObjectAnimator是ValueAnimator的子类,ObjectAnimator能够监听到属性的变化并通知目标对象。

 更多相关文章

·Android HTML5视频播放
·Android基于MediaPlayer的视频播放
·Android 中如何使用SIP服务
·Android音频混响特效的设置
·Android可视化音频均衡器
·Android重低音及环绕音音效的添加