返回

小白学图像处理——Android图像处理技巧实例

Android

在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上。