java 渐变橡皮擦_android实现图片橡皮擦和快速染色功能

本文为大家分享了android实现图片橡皮擦和快速染色的具体代码,供大家参考,具体内容如下

1.染色

关于染色部分,可以分别设置调整画笔的大小和画笔的透明度,画笔已经设置了模糊效果。画笔的特效可以调整下面一行代码:

5cb18a92bbf304905a894c37aafa6719.png

2.橡皮擦

橡皮擦的实现用了两个canvas,一个临时的,一个是作用在ImageTouchView上显示的,代码里面有注释,这里不再详细介绍。

3.功能展示:

原图:

655c5bf9effe28bc5f514318ff43b240.png

画笔设置界面:

9860fd97fdc7fa08aa3c46b89500f416.png

(1)画笔大小为32,透明度为255(不透明)。如下图:

9c82145538470416cd703c01eba67499.png

(2)画笔大小为32,透明度为10,如下图:

4149076eb2cf29c5c1010f651d860ec4.png

融合的效果跟画笔的透明度有关系,也跟背景图片的相应区域颜色有关,所以透明度的值自行调整得出满意效果。

(3)擦除

擦除前图像:

05d7fba8a96df4a7912fb94120a09a59.png

部分擦除后:

e967c8561cc316a1226ae3a820cae908.png

4.Bitmap处理相关的类BitmapUtils:

package com.jiangjie.utils;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import android.content.Context;

import android.content.res.Resources;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.Bitmap.Config;

public class BitmapUtils {

/**

* 缩放图片

*/

public static void bitmapScale(Bitmap baseBitmap, Paint paint, float x, float y) {

// 因为要将图片放大,所以要根据放大的尺寸重新创建Bitmap

Bitmap scaleBitmap = Bitmap.createBitmap(

(int) (baseBitmap.getWidth() * x),

(int) (baseBitmap.getHeight() * y), baseBitmap.getConfig());

Canvas canvas = new Canvas(scaleBitmap);

// 初始化Matrix对象

Matrix matrix = new Matrix();

// 根据传入的参数设置缩放比例

matrix.setScale(x, y);

// 根据缩放比例,把图片draw到Canvas上

canvas.drawBitmap(baseBitmap, matrix,paint);

}

/**

* 图片旋转

*/

public static void bitmapRotate(Bitmap baseBitmap, Paint paint,float degrees) {

// 创建一个和原图一样大小的图片

Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth(),

baseBitmap.getHeight(), baseBitmap.getConfig());

Canvas canvas = new Canvas(afterBitmap);

Matrix matrix = new Matrix();

// 根据原图的中心位置旋转

matrix.setRotate(degrees, baseBitmap.getWidth() / 2,

baseBitmap.getHeight() / 2);

canvas.drawBitmap(baseBitmap, matrix, paint);

}

/**

* 图片移动

*/

public static void bitmapTranslate(Bitmap baseBitmap, Paint paint, float dx, float dy) {

// 需要根据移动的距离来创建图片的拷贝图大小

Bitmap afterBitmap = Bitmap.createBitmap(

(int) (baseBitmap.getWidth() + dx),

(int) (baseBitmap.getHeight() + dy), baseBitmap.getConfig());

Canvas canvas = new Canvas(afterBitmap);

Matrix matrix = new Matrix();

// 设置移动的距离

matrix.setTran

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值