Android图形图像处理

Android图形图像处理

市面上大多数的Android程序都会用到图形图像处理技术,例如绘制图形,为图片添加特效等。在绘制图像时最常用的就是Bitmap类、BitmapFactory类、Paint类、Canvas类和Matrix类。其中,Bitmap类代表位图,BitmapFactory类顾名思义就是位图工厂,它是一个工具类,Paint类代表画笔,Canvas类代表画布,为图片添加特效使用的是Matrix类。本文将针对图形处理的API进行讲解。

Bitmap类

Bitmao类是Android系统中非常重要的图像处理类,它提供了一系列的方法,可对图像进行旋转、缩放等操作,并可以指定格式保存图像文件。Bitmap类提供的常用方法如下所示:

方法描述
drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制弧形
drawBitmap (Bitmap bitmap, float left, float top, Paint paint)绘制位图
drawCircle (float cx, float cy, float radius, Paint paint)绘制圆形
drawLine (float startX, float startY, float stopX, float stopY, Paint paint)绘制一条线
drawPoint (float x, float y, Paint paint)绘制一个点
drawRect (float left, float top, float right, float bottom, Paint paint)绘制矩形
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

            Paint paint = new Paint();
            super.onDraw(canvas);
            paint.setColor(Color.RED);
            paint.setStrokeWidth(5);
            paint.setStyle(Paint.Style.FILL);

            //绘制路径
            Path path = new Path();
            path.addArc(200, 200, 400, 400, -225, 225);
            path.arcTo(400, 200, 600, 400, -180, 225, false);
            path.lineTo(400, 542);
            //路径剪裁
            canvas.clipPath(path);
            canvas.drawRect(0, 0, 800, 800, paint);
    }

convas

Paint类常用方法

Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用Paint类时,首先要创建它的实例对象,然后通过该类提供的方法来更改Paint对象的默认设置。Paint类提供的常用方法如下:

方法描述
setAlpha(int a)设置透明度
setARGB(int a, int r, int g, int b)绘制颜色
setColor(int color)设置颜色
setShader(Shader shader)设置渲染效果
setShadowLayer(float radius, float dx, float dy, int color)设置阴影
setStrokeWidth(float width)设置画笔粗细
 protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 把整张画布绘制成白色
        canvas.drawColor(Color.WHITE);
        Paint paint = new Paint();

        /**
         * 设置画笔的锯齿效果,去锯齿
         * 设置画笔颜色,蓝色
         * 设置画笔风格,空心
         * 设置空心画笔的宽度,3
         */
        paint.setAntiAlias(true);
        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(3);

        /**
         * 绘制圆形
         * 绘制正方形
         * 绘制矩形
         */
        canvas.drawCircle(40, 40, 30, paint);
        canvas.drawRect(10, 80, 70, 140, paint);
        canvas.drawRect(10, 150, 70, 190, paint);

        RectF re1 = new RectF(10, 200, 70, 230);
        // 绘制圆角矩形
        canvas.drawRoundRect(re1, 15, 15, paint);
        RectF re11 = new RectF(10, 240, 70, 270);
        // 绘制椭圆
        canvas.drawOval(re11, paint);
        // 定义一个Path对象,封闭成一个三角形。
        Path path1 = new Path();
        path1.moveTo(10, 340);
        path1.lineTo(70, 340);
        path1.lineTo(40, 290);
        path1.close();
        // 根据Path进行绘制,绘制三角形
        canvas.drawPath(path1, paint);

        // 定义一个Path对象,封闭成一个五角形。
        Path path2 = new Path();
        path2.moveTo(26, 360);
        path2.lineTo(54, 360);
        path2.lineTo(70, 392);
        path2.lineTo(40, 420);
        path2.lineTo(10, 392);
        path2.close();
        // 根据Path进行绘制,绘制五角形
        canvas.drawPath(path2, paint);

        // ----------设置填充风格后绘制----------
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);

        canvas.drawCircle(120, 40, 30, paint);
        canvas.drawRect(90, 80, 150, 140, paint);
        canvas.drawRect(90, 150, 150, 190, paint);

        RectF re2 = new RectF(90, 200, 150, 230);
        //绘制圆角矩形
        canvas.drawRoundRect(re2, 15, 15, paint);

        RectF re21 = new RectF(90, 240, 150, 270);
        // 绘制椭圆
        canvas.drawOval(re21, paint);

        Path path3 = new Path();
        path3.moveTo(90, 340);
        path3.lineTo(150, 340);
        path3.lineTo(120, 290);
        path3.close();
        //绘制三角形
        canvas.drawPath(path3, paint);

        Path path4 = new Path();
        path4.moveTo(106, 360);
        path4.lineTo(134, 360);
        path4.lineTo(150, 392);
        path4.lineTo(120, 420);
        path4.lineTo(90, 392);
        path4.close();
        //绘制五角形
        canvas.drawPath(path4, paint);

        // ----------设置渐变器后绘制----------
        // 为Paint设置渐变器
        Shader mShader = new LinearGradient(0, 0, 40, 60
                , new int[] {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW }
                , null , Shader.TileMode.REPEAT);
        paint.setShader(mShader);
        //设置阴影
        paint.setShadowLayer(45 , 10 , 10 , Color.GRAY);
        // 绘制圆形
        canvas.drawCircle(200, 40, 30, paint);
        // 绘制正方形
        canvas.drawRect(170, 80, 230, 140, paint);
        // 绘制矩形
        canvas.drawRect(170, 150, 230, 190, paint);

        RectF re3 = new RectF(170, 200, 230, 230);
        // 绘制圆角矩形
        canvas.drawRoundRect(re3, 15, 15, paint);

        RectF re31 = new RectF(170, 240, 230, 270);
        // 绘制椭圆
        canvas.drawOval(re31, paint);

        Path path5 = new Path();
        path5.moveTo(170, 340);
        path5.lineTo(230, 340);
        path5.lineTo(200, 290);
        path5.close();
        // 根据Path进行绘制,绘制三角形
        canvas.drawPath(path5, paint);

        Path path6 = new Path();
        path6.moveTo(186, 360);
        path6.lineTo(214, 360);
        path6.lineTo(230, 392);
        path6.lineTo(200, 420);
        path6.lineTo(170, 392);
        path6.close();
        // 根据Path进行绘制,绘制五角形
        canvas.drawPath(path6, paint);

        // ----------设置字符大小后绘制----------
        paint.setTextSize(24);
        paint.setShader(null);
        // 绘制7个字符串
        canvas.drawText("circle", 240, 50,paint);
        canvas.drawText("square", 240, 120,paint);
        canvas.drawText("rect", 240, 175,paint);
        canvas.drawText("RoundRect", 230, 220, paint);
        canvas.drawText("Oval", 240,260, paint);
        canvas.drawText("triangle", 240, 325,paint);
        canvas.drawText("pentagon", 240, 390,paint);


    }

paint

Matrix类

Android提供了Matrix类,使用该类提供的方法,可以对图片添加特别的效果,如旋转、缩放、倾斜等。Matrix类常用的一些方法如下:

方法描述
setTranslate(float dx,float dy)控制Matrix进行位移。
setSkew(float kx,float ky)控制Matrix进行倾斜,kx、ky为X、Y方向上的比例。
setSkew(float kx,float ky,float px,float py)控制Matrix以px、py为轴心进行倾斜,kx、ky为X、Y方向上的倾斜比例。
setRotate(float degrees)控制Matrix进行depress角度的旋转,轴心为(0,0)。
setRotate(float degrees,float px,float py)控制Matrix进行depress角度的旋转,轴心为(px,py)。
setScale(float sx,float sy)设置Matrix进行缩放,sx、sy为X、Y方向上的缩放比例。
setScale(float sx,float sy,float px,float py)设置Matrix以(px,py)为轴心进行缩放,sx、sy为X、Y方向上的缩放比例。

作者:黄俊雄
原文链接
https://blog.csdn.net/weixin_43915481/article/details/90724437

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值