Android_图像处理技术01_常用绘图类

常用绘图类

描述
Paint 类 画笔类,用来描述图形的颜色和风格
Canvas 类 画布类,用于绘制各种图形
Path 类 路径类,用于绘制路径
Bitmap 类 位图类,用于获取图像文件信息,主要对图像进行剪切、旋转、缩放等操作
BitmapFactory 类 位图工厂类,用于从不同的数据源来分析、创建 Bitmap 对象

1、Paint 类

  Paint 类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用如下:

Paint paint = new Paint(); // 画笔类,用来描述图形的颜色和风格
/**
 * 创建一个沿线绘制线性渐变的着色器。
 *
 * @param x0       渐变线起点的x坐标
 * @param y0       渐变线起点的y坐标
 * @param x1       渐变线末端的x坐标
 * @param y1       渐变线末端的y坐标
 * @param color0   渐变线开头的颜色。
 * @param color1   渐变线末端的颜色。
 * @param tile     着色器平铺模式
 */
Shader shader = new LinearGradient(0, 0, 100, 100, Color.RED, Color.GREEN, Shader.TileMode.MIRROR);
paint.setShader(shader); // 为画笔设置渐变器

Shader 类中的 TileMode 

public enum TileMode {
    /**
     * 如果着色器在其原始边界之外绘制,则复制边缘颜色
     */
    CLAMP   (0),
    /**
     * 水平和垂直重复着色器的图像
     */
    REPEAT  (1),
    /**
     * 水平和垂直重复着色器的图像,交替镜像,使相邻的图像始终接缝
     */
    MIRROR  (2);

    TileMode(int nativeInt) {
        this.nativeInt = nativeInt;
    }
    final int nativeInt;
}

2、Canvas 类

  Canvas 类代表画布,通过该类提供的方法,可以绘制各种图形(如矩形、圆形和线条等)。

  通常情况下,要在 Android 中绘图,需要先创建一个继承自 View 类的视图,并且在该类中重写其 onDraw(Canvas canvas) 方法,然后在显示绘图的 Activity 中添加该视图。

public class CanvasActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_canvas);

        FrameLayout frameLayout = (FrameLayout) findViewById(R.id.fl_frameLayout);
        frameLayout.addView(new MyView(this)); // 将自定义视图的内部类添加到帧布局管理器中
    }

    private class MyView extends View {
        public MyView(Context context) {
            super(context);
        }
        /**
         * 编写绘图代码
         *
         * @param canvas 进行绘图的画布
         */
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            Paint paint = new Paint();
            Shader shader = new LinearGradient(0, 0, 100, 100, Color.RED, Color.GREEN, Shader.TileMode.CLAMP);
            paint.setShader(shader);
            /**
             * 使用指定的画笔绘制指定的Rect。 矩形将根据画笔中的样式填充或加框。
             *
             * @param left 要绘制的矩形的左侧
             * @param top 要绘制的矩形的顶边
             * @param right 要绘制的矩形的右侧
             * @param bottom 要绘制的矩形的底边
             * @param paint 用于绘制矩形的画笔
             */
            canvas.drawRect(10, 10, 280, 150, paint); // 绘制矩形
        }
    }
}

3、Path 类

  Path 类用于绘制路径,该类中包含一组矢量绘图方法,图画圆、矩形、弧、线条等。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    Paint paint = new Paint();
    paint.setStyle(Paint.Style.STROKE); // 使用此样式绘制的几何和文本将被描边,尊重绘画上与笔划相关的字段。
    // 画折线
    Path path = new Path();
    path.moveTo(50, 50); // 设置起点,默认(0, 0)
    path.lineTo(100, 10); // 设置第1条线的结束点,也是第2条线的起始点
    path.lineTo(150, 50); // 设置第2条线的结束点
    // 若要绘制三角形,可以在最后使用 close() 方法闭合路径
    // path.close();

    canvas.drawPath(path, paint);
}

结果展示:

  绘制各种各样的图形 https://blog.csdn.net/u012702547/article/details/52454406 

4、Bitmap 类

  Bitmap 类代表位图,是 Android 系统中图像处理的一个重要类。使用该类,使用该类,不仅可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,而且还可以指定格式保存图像文件。

常用方法:

  

   

  用于将 Bitmap 对象压缩为指定格式并保存到指定的文件输出流中,其中 format 参数值可以是 Bitmap.CompressFormat.PNG、Bitmap.CompressFormat.JPG 和 Bitmap.CompressFormat.WEBP。

  

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    
    // 创建一个4个像素(每个像素对应一种颜色)的 Bitmap 对象
    Bitmap bitmap = Bitmap.createBitmap(new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.MAGENTA}, 4, 1, Bitmap.Config.RGB_565);
    canvas.drawBitmap(bitmap, 10, 10, new Paint());
}

5、BitmapFactory 类

  用于从不同的数据源来解析、创建 Bitmap 对象。

常用方法:

  

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    // 解析SD卡上的图片文件,并创建 Bitmap对象
    String path = Environment.getExternalStorageDirectory().getPath() + "/img01.png";
    Bitmap bitmap = BitmapFactory.decodeFile(path);

    // 解析 Drawable资源中保存的文件,并创建 Bitmap对象
    Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.img02);

    canvas.drawBitmap(bitmap, 10, 10, new Paint());
}

 

posted on 2018-01-17 11:30  JonSnows  阅读(405)  评论(0)    收藏  举报

导航