Android图形图像使用总结

一.图形特效

(一)特效的实现方式

在Android中,提供了3种方式实现特效,setXXX方法,postXXX和preXXX()方法。

1.setXXX方法用于直接设置Matrix的值,每使用一次setXXX()方法,整个的Matrix都会变掉。

2.postXXX方法用于采用后乘的方式为Matrix设置值,可以连续多次使用post完成多个变换

3.preXXX方法用于采用前乘的方式为Matrix设置值,使用preXXX方法的设置操作最先发生.

(二)特效的表现形式

1.旋转:setRotate(float dgrees,float px,float py)

px、py为旋转的轴心

2.缩放:setScale(float sx.float sy)

sx和sy用于指定x轴和轴y轴的缩放比例

Android提供了android.graphics.Matrix类的seetScale(),postScale()和preScale()方法可对图像进行缩放.这三个方法除了方法名不同外,其它的语法格式均相同

3.倾斜 setSkew (float kx.float ky)

ky和ky用于指定x轴和轴y轴的倾斜量

Android提供了android.graphics.Matrix类的setSkew()(),postSkew ()和preSkew()方法可对图像进行倾斜.这三个方法除了方法名不同外,其它的语法格式均相同

setSkew (float sx,float sy,float px,float py)

px 和py是以它们为轴心进行倾斜

4.平移 setTranslate (float dx.float dy)

dy和dy用于指定移动到的位置的x和y的坐标

Android提供了android.graphics.Matrix类的setTranslate (),postTranslate ()和 preTranslate ()方法可对图像进行平移.这三个方法除了方法名不同外,其它的语法格式均相同

二.BitmapShader渲染图像

在android中BitmapShader类主要用来渲染图像,如果需要将一张图片裁剪成椭圆或者圆形等 形状显示到屏幕上时,就可以使用BitmapShader类来实现,使用BitmapShader类来渲染图像的

基本步骤如下

创建BitmapShader类的对象, 通过Paint的setShader()方法来设置渲染对象. 在绘制图像时,使用已经设置了setShader()方法的画笔.

三.下面是一个图形特效控制的一个示例

程序通过按键来控制图像的放大缩小、旋转、倾斜。

(一)自定义的View的代码

package lesson10_fragmentfordata.myapplication;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;

/**
 * 图像特效的演示
 */

public class MyView extends View {

    //定义Bitmap对象
    Bitmap bitmap;
    //创建矩阵对象
    Matrix matrix = new Matrix();

    //宽和高
    int width, height;

    //缩放比例
    float scale = 1f;

    //图像的状态是缩放还是旋转
    Boolean isScale = false;
    //判断是否旋转
    Boolean istRotate = false;

    //x轴方向倾斜的角度
    private float sx;
    //旋转的角度
    private float degress;

    //重写俩个构造方法
    public MyView(Context context) {
        super(context);
        initView();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    /**
     * 初始化数据
     */
    private void initView() {
        //获取位图   bitmap=getContext().getResources().getDrawable(R.mipmap.img01);
        bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.a3);
        //获取宽和高
        width = bitmap.getWidth();
        height = bitmap.getHeight();
        //使当前的视图获取焦点
        this.setFocusable(true);
    }

    /**
     * 重写onDraw重绘的方法
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        matrix.reset();//重置
        if (isScale) {
            //伸缩状态
            matrix.setScale(scale, scale);
        } else {
            //倾斜状态
            matrix.setSkew(sx, 0);
        }

        if (istRotate) {
            //顺时针旋转30度
            matrix.setRotate(degress,0.5f*width,0.5f*height);
        }
        //根据原始位图和Matrix创建新图片
        Bitmap bit = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        //从新绘制位图
        canvas.drawBitmap(bit, matrix, null);

    }

    /**
     * 键盘控制的逻辑
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_A://点击A向左倾斜
                isScale = false;
                istRotate=false;
                sx -= 0.1;
                invalidate();//重绘
                break;
            case KeyEvent.KEYCODE_D://点击D向右倾斜
                isScale = false;
                istRotate=false;
                sx += 0.1;
                invalidate();//重绘
                break;
            case KeyEvent.KEYCODE_W://点击W图像变大
                isScale = true;
                istRotate=false;
                scale += 0.1;
                invalidate();//重绘
                break;
            case KeyEvent.KEYCODE_S://点击S图像变小
                isScale = true;
                istRotate=false;
                scale -= 0.1;
                invalidate();//重绘
                break;
            case KeyEvent.KEYCODE_X://点击x图像顺时针旋转30度
                istRotate = true;
                degress += 30;
                invalidate();//重绘
                break;

        }
        return super.onKeyDown(keyCode, event);
    }
}

(二)调用类

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
    }
}

程序通过W键控制放大后的效果:

程序通过D键控制倾斜后的效果:

程序通过X键控制旋转后的效果:

时间: 11-29

Android图形图像使用总结的相关文章

[Android学习系列20]图形图像的一些事

参考: android图形系统详解一:Canvas android图形系统详解二:Drawables android图形系统详解三:形状Drawable和九宫格 android图形系统详解四:控制硬加速 android图形系统详解五:Android绘制模式 android图形系统详解六:View layer[Android学习系列20]图形图像的一些事,码迷,mamicode.com

安卓第十五天笔记-图形图像一些简单处理

安卓第十五天笔记-图形图像一些简单处理 多媒体编程简介--图形的一般处理 1.计算机中图形计算的大小 一般白色就是0,黑色就是1 单色位图: 8位表示一个字节, 大小:长*宽/8,表示大小,还有一些文件信息如创建时间,什么工具创建之类的 24位位图 一个像素表示24位 大小:长*宽*24/8 256色 1个像素可以表示256种颜色 一个字节它的长度刚好是256 ,那么一个像素点就是一个字节 大小:长*宽 安卓中默认使用32位的 位图的缺陷 放大到一定的比例会出会出现失真与锯齿形状 占用很大的存储

利用HTML5技术在Web上实现对图形图像的处理——WebPhotoshop精简版

WebPhotoshop精简版是利用HTML5技术在Web上实现对图形图像的处理,构建易维护.易共享.易于拓展.实时性的Web图形图像处理平台. 精简版功能包括:图形绘制.图像处理.图像操作.完整版包括多人协作操作图像.实时交流.图片搜索,同时实现实时的多人协作处理图形图像技术.(完整版后续上传)一.功能说明:1.图形绘制 实现铅笔.画笔(书法画笔.喷枪.蜡笔.记号笔.水彩画笔)的绘制效果.实现直线.曲线.椭圆(圆).矩形(圆角矩形).三角形(直角三角形.等边三角形.任意三角形).多边形的绘制.

超全面的.NET GDI+图形图像编程教程

本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了分享给大家,纯手工码了好几天的字,喜欢的表忘了点赞哦~给点小小的动力~ 目录: <GDI+绘图基础> 1 GDI+概述 2 Graphics类 2.1 Graphics类的方法成员 2.2 引用命名空间 3 常用画图对象 3.1 Pen类 3.2 Color结构 3.3 Font类 3.4 Bru

GDI+图形图像技术1

System.Drawing命名空间提供了对GDI+基本图形功能的访问,其中一些子命名空间中提供了更高级的功能. GDI+由GDI发展而来,是Windows图形显示程序与实际物理设备之间的桥梁. GDI+是GDI的增强版,主要提供以下三类服务: 1)二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体).存储图形基元绘制方式信息的类以及实际进行绘制的类. 2)图像处理:提供Bitmap.Image等类. 3)文字显示:支持使用各种字体,字号和样式来显示文本. GDI接口是基于函数的,而

java图形图像SVG转PPM程序代写 qq:928900200

Background Many image file formats encode image data as a 2-D matrix or raster of pixel colors. The amount of available color information is fixed by the image's width and height of its resolution. If the resolution is too small, you will have proble

8 个优秀的 Linux 图形图像及色彩工具

8 个优秀的 Linux 图形图像及色彩工具 1. 硬件色彩分析器LPROF LPROF 是一个用于创建设备兼容,如相机.扫描仪.显示器的ICC兼容型材的颜色分析器.这些配置提供跨设备的色彩一致性.他们可以用在颜色配置文件识别软件,如GIMP与Scribus. 2. 从高端照相机导入Raw数据的工具 UFRaw UFRaw是一个原始图像处理工具.它用来处理数码相机中的原始格式图片,生成常见的图片格式.它既可独立使用,也可作为 GIMP 的插件.命令行模式允许你对图片进行批量处理.它还支持色彩管理

我的Android进阶之旅------&gt;Android嵌入图像InsetDrawable的用法

面试题:为一个充满整个屏幕的LinearLayout布局指定背景图,是否可以让背景图不充满屏幕?请用代码描述实现过程. 解决此题,可以使用嵌入(Inset)图像资源来指定图像,然后像使用普通图像资源一样使用嵌入图像资源. 语法如下: <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android&

Android捕捉图像后在SurfaceView上变形显示问题的处理

我们在Android中经常会使用SurfaceView编写自定义的摄像头,可是有的时候会经常会出现图像的变形,我们就会很郁闷的问这到底是为什么呢?其实这个最根本的原因是SurfaceView和PreViewSize的尺寸不是同一个比率. 所谓PreViewSize就是在预览的时候帧数据的尺寸,SurfaceView是用来预览Camera的视图,它的尺寸也就是Screen全屏时候的大小.还有一个重要尺寸的是PictureSize,这个是拍照后图片的尺寸,就是所保存的结果图片的大小. 所以解决刚刚问

[Android] 给图像添加相框、圆形圆角显示图片、图像合成知识

    前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和添加水印,继续我的"随手拍"项目完成给图片添加相框.圆形圆角显示图片和图像合成的功能介绍.希望文章对大家有所帮助. 一. 打开图片和显示assets文件中图片 首先,对XML中activity_main.xml进行布局,通过使用RelativeLayout相对布局完成(XML代码后面附).然后,在Mainctivity.java中public class MainActivity e