返回
小白学图像处理——Android图像处理技巧实例
Android
2024-02-10 03:20:19
在Android应用程序开发中,经常需要对图像进行处理,例如裁剪、旋转、缩放、添加水印等。Android提供了Canvas, Matrix, ColorMatrix等类来帮助我们进行图像处理。
1. 绘制图像
要绘制图像,首先需要创建一个Canvas对象,然后使用Canvas的drawBitmap()方法将图像绘制到Canvas上。代码如下:
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(sourceBitmap, 0, 0, null);
2. 裁剪图像
要裁剪图像,可以使用Canvas的clipRect()方法来设置裁剪区域。代码如下:
canvas.clipRect(left, top, right, bottom);
canvas.drawBitmap(sourceBitmap, 0, 0, null);
3. 旋转图像
要旋转图像,可以使用Matrix对象的preRotate()方法来设置旋转角度。代码如下:
Matrix matrix = new Matrix();
matrix.preRotate(angle);
canvas.drawBitmap(sourceBitmap, matrix, null);
4. 缩放图像
要缩放图像,可以使用Matrix对象的preScale()方法来设置缩放比例。代码如下:
Matrix matrix = new Matrix();
matrix.preScale(scaleX, scaleY);
canvas.drawBitmap(sourceBitmap, matrix, null);
5. 添加水印
要添加水印,可以使用Canvas的drawText()方法来绘制文字。代码如下:
canvas.drawText("水印", x, y, paint);
6. 保存图像
要保存图像,可以使用Bitmap的compress()方法将图像压缩成指定格式的字节数组,然后使用FileOutputStream将字节数组写入到文件中。代码如下:
bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file));
以上是Android中图像处理的一些基本操作,掌握了这些操作,就可以对图像进行各种各样的处理了。
实例
下面是一个使用Android进行图像处理的实例。这个实例将一张图片裁剪成圆形,然后将裁剪后的图片保存到本地。
public class CropCircleBitmapActivity extends Activity {
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crop_circle_bitmap);
mImageView = (ImageView) findViewById(R.id.image_view);
// 获取原始图片
Bitmap sourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
// 裁剪图片成圆形
Bitmap croppedBitmap = cropCircleBitmap(sourceBitmap);
// 将裁剪后的图片保存到本地
saveBitmap(croppedBitmap, "cropped_image.png");
// 将裁剪后的图片显示在ImageView上
mImageView.setImageBitmap(croppedBitmap);
}
/**
* 将图片裁剪成圆形
*
* @param sourceBitmap 要裁剪的图片
* @return 裁剪后的图片
*/
private Bitmap cropCircleBitmap(Bitmap sourceBitmap) {
int size = Math.min(sourceBitmap.getWidth(), sourceBitmap.getHeight());
// 创建一个新的位图,大小为size*size
Bitmap croppedBitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
// 创建一个新的画布
Canvas canvas = new Canvas(croppedBitmap);
// 设置画布的裁剪区域为圆形
canvas.clipPath(new Path().addCircle(size / 2, size / 2, size / 2, Path.Direction.CW));
// 将原始图片绘制到画布上
canvas.drawBitmap(sourceBitmap, 0, 0, null);
// 返回裁剪后的图片
return croppedBitmap;
}
/**
* 将图片保存到本地
*
* @param bitmap 要保存的图片
* @param fileName 图片文件名
*/
private void saveBitmap(Bitmap bitmap, String fileName) {
try {
// 创建一个新的文件输出流
FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
// 将图片压缩成PNG格式并写入文件输出流中
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
// 关闭文件输出流
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个实例首先获取原始图片,然后使用cropCircleBitmap()方法将图片裁剪成圆形,最后将裁剪后的图片保存到本地并显示在ImageView上。