Android中的图形图像处理

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn_draw_circle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="画圆"/>

    <Button
        android:id="@+id/btn_draw_star"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="画五角星"/>

    <Button
        android:id="@+id/btn_translate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="平移变换"/>

    <ImageView
        android:id="@+id/iv_translate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="matrix"
        android:src="@mipmap/custom1"/>

        <Button
            android:id="@+id/btn_translate_scale"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="平移和缩放变换"/>

        <ImageView
            android:id="@+id/iv_translate_scale"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="matrix"
            android:src="@mipmap/custom2"/>

        <Button
            android:id="@+id/btn_skew_rotate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="错切和旋转变换"/>

        <ImageView
            android:id="@+id/iv_skew_rotate"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:src="@mipmap/custom3"/>

        <Button
            android:id="@+id/btn_bitmap_shader"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Shader渲染"/>

        <ImageView
            android:id="@+id/iv_bitmap_shader"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:src="@mipmap/custom4"/>

        <Button
            android:id="@+id/btn_line_shader"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="渐变填充"/>

        <ImageView
            android:id="@+id/iv_line_shader"
            android:layout_width="match_parent"
            android:layout_height="100dp"/>

        <ImageView
            android:id="@+id/iv_line_shader1"
            android:layout_width="match_parent"
            android:layout_height="100dp"/>
    </LinearLayout>

</ScrollView>
```java
package net.onest.paintapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Shader;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    private Button btnPaint;
    private Button btnPaintStar;
    private ImageView iv;
    private Button btnTranslate;
    private ImageView ivTranslate;
    private Button btnTranslateScale;
    private ImageView ivTranslateScale;
    private Button btnSkewRotate;
    private ImageView ivSkewRotate;
    private Button btnShader;
    private ImageView ivShader;
    private Button btnLineShader;
    private ImageView ivLineShader;
    private ImageView ivLineShader1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViews();
        setListeners();
    }

    private void drawStar(){
        //创建bitmap对象
        Bitmap bitmap=Bitmap.createBitmap(1000,1000,Bitmap.Config.ARGB_8888);
        //创建canvas对象
        Canvas canvas=new Canvas(bitmap);
        //创建Paint对象
        Paint paint=new Paint();
        paint.setColor(getResources().getColor(R.color.colorYellow));
        paint.setARGB(200,100,58,180);
        Path path=new Path();
        path.moveTo(0,250);
        path.lineTo(1000,250);
        path.lineTo(0,1000);
        path.lineTo(500,0);
        path.lineTo(1000,1000);
        path.lineTo(0,250);
        canvas.drawPath(path,paint);
        iv.setImageBitmap(bitmap);
    }

    private void drawCircle(){
        //创建Bitmap对象
        Bitmap bitmap=Bitmap.createBitmap(800,800,Bitmap.Config.ARGB_8888);
        //创建Canvas对象
        Canvas canvas=new Canvas(bitmap);
        //创建Paint对象
        Paint paint=new Paint();
        paint.setStrokeWidth(5);
        paint.setColor(Color.RED);
        paint.setColor(getResources().getColor(R.color.colorPrimary));
        paint.setARGB(200,100,58,180);
        //不填充颜色(空心)
        paint.setStyle(Paint.Style.STROKE);
        //使用Bitmap对象生成图像
        canvas.drawCircle(100,100,100,paint);
        //显示
        iv.setImageBitmap(bitmap);
    }

    private void setListeners() {
        MyListener myListener=new MyListener();
        btnPaint.setOnClickListener(myListener);
        btnPaintStar.setOnClickListener(myListener);
        btnTranslate.setOnClickListener(myListener);
        btnTranslateScale.setOnClickListener(myListener);
        btnSkewRotate.setOnClickListener(myListener);
        btnShader.setOnClickListener(myListener);
        btnLineShader.setOnClickListener(myListener);
    }

    class MyListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_draw_circle:
                    drawCircle();
                    break;
                case R.id.btn_draw_star:
                    drawStar();
                    break;
                case R.id.btn_translate://做图像的平移变换
                    translateImageview();
                    break;
                case R.id.btn_translate_scale://对图像控件进行平移、缩放变换
                    translateScaleImageView();
                    break;
                case R.id.btn_skew_rotate://对图像进行错切和旋转
                    skewRotateImage();
                    break;
                case R.id.btn_bitmap_shader:
                    bitmapShader();
                    break;
                case R.id.btn_line_shader://渐变填充效果
                    lineShader();
                    break;
            }
        }
    }

    private void lineShader() {//线性渐变填充
        //创建空白的bitmap对象
        Bitmap bitmap=Bitmap.createBitmap(800,800, Bitmap.Config.ARGB_8888);
        //创建canvas对象
        Canvas canvas=new Canvas(bitmap);
        //创建paint对象
        Paint paint=new Paint();
        //设置线宽、线性渐变的shader对象、渐变填充样式
        paint.setStrokeWidth(50);
        Shader shader=new LinearGradient(0,0,//渐变起始坐标
                800,400,//渐变终止坐标
                Color.RED,Color.BLUE,//渐变色
                Shader.TileMode.REPEAT);
        paint.setShader(shader);

        //canvas对象画图(画直线)
        canvas.drawLine(0,0,800,400,paint);
        //改变shader样式
        Bitmap bitmap1=BitmapFactory.decodeResource(getResources(),R.mipmap.custom1);
        BitmapShader shader1=new BitmapShader(bitmap1,Shader.TileMode.MIRROR,Shader.TileMode.MIRROR);
        paint.setShader(shader1);
        paint.setStrokeWidth(200);
        canvas.drawLine(0,400,800,400,paint);
        //显示
        ivLineShader.setImageBitmap(bitmap);
    }

    private void bitmapShader() {//应用图像渲染
        //获取作为底图的图像对象
        Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.mipmap.custom4);
        //创建空白bitmap对象
        Bitmap bitmapNew=Bitmap.createBitmap(800,800, Bitmap.Config.ARGB_8888);
        //创建canvas对象
        Canvas canvas=new Canvas(bitmapNew);
        //创建paint对象,设置文本大小、颜色
        Paint paint=new Paint();
        paint.setTextSize(50);
        //设置填充效果,创建shader对象,给paint对象
        Shader shader=new BitmapShader(bitmap,
                Shader.TileMode.REPEAT,//水平填充方式
                Shader.TileMode.REPEAT);//树脂填充方式
        //给paint设置填充效果
        paint.setShader(shader);
        //往空白图想上写字(x、y:字的起始位置)
        canvas.drawText("神奇的艺术字效果",50,50,paint);
        //将生成的图像设置给view
        ivShader.setImageBitmap(bitmapNew);
    }

    private void skewRotateImage() {
        //获取应用变换的图像对象
        Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.mipmap.custom3);
        //不能对原有的图像进行变换(原有图像相当于一个常量)
        //创建一个空的bitmap,存储获得的图像
        Bitmap bitmapCopy=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        //创建matrix
        Matrix matrix=new Matrix();
        //给matrix设置错切和旋转变换
        matrix.setSkew(0.2f,-1.1f);
        //设置图像以其中心为轴逆时针进行旋转
        matrix.postRotate(-45);
        matrix.postTranslate(0,50);
        //去除锯齿,防止图像在进行变换后失真
        Paint paint=new Paint();
        paint.setAntiAlias(true);
        //创建canvas对象
        Canvas canvas=new Canvas(bitmapCopy);
        //应用给图像变换(绘制图像的同时,应用变换)
        canvas.drawBitmap(bitmap,matrix,paint);
        //将变换后的图像显示在图像控件中
        ivSkewRotate.setImageBitmap(bitmapCopy);
    }

    private void translateScaleImageView() {
        Matrix matrix=new Matrix();
        matrix.setTranslate(400,0);
        matrix.postScale(2,0.5f);
        ivTranslateScale.setImageMatrix(matrix);
    }

    private void translateImageview() {
        //创建matrix对象
        Matrix matrix=new Matrix();
        //设置平移效果
        matrix.setTranslate(300,0);
        //给目标对象应用matrix设置的效果
        ivTranslate.setImageMatrix(matrix);
    }

    private void findViews() {
        btnPaint=findViewById(R.id.btn_draw_circle);
        btnPaintStar=findViewById(R.id.btn_draw_star);
        iv=findViewById(R.id.iv);
        btnTranslate=findViewById(R.id.btn_translate);
        ivTranslate=findViewById(R.id.iv_translate);
        btnTranslateScale=findViewById(R.id.btn_translate_scale);
        ivTranslateScale=findViewById(R.id.iv_translate_scale);
        btnSkewRotate=findViewById(R.id.btn_skew_rotate);
        ivSkewRotate=findViewById(R.id.iv_skew_rotate);
        btnShader=findViewById(R.id.btn_bitmap_shader);
        ivShader=findViewById(R.id.iv_bitmap_shader);
        btnLineShader=findViewById(R.id.btn_line_shader);
        ivLineShader=findViewById(R.id.iv_line_shader);
        ivLineShader1=findViewById(R.id.iv_line_shader1);
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值