【问题标题】:how can i custom crop an image in android ?如何在 android 中自定义裁剪图像?
【发布时间】:2023-03-12 17:01:02
【问题描述】:

我有一个显示图像的活动,我能够缩放图像并移动它,我在屏幕中心有一个不移动的矩形,我希望这个矩形内的所有内容都能够裁剪图像,我该怎么做?

我有一个仅用于矩形绘制的自定义类 这是我的代码:

@Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
Rect mCropRectangle = new Rect();
        mCropRectangle.set(
                getLeft(),
                getTop()+(getBottom()+getTop())/6,
                getRight(),
                getBottom()-(getBottom()+getTop())/6
                );
}

【问题讨论】:

  • 我会使用这个库android-crop-library,这是一个很好的库。
  • @Skizo 有没有一种简单的方法可以做我想做的事?因为我真的不想使用库
  • 看看这个question 但我会使用这个库...
  • 不幸的是,问题的方法使我的应用程序崩溃
  • 当然......这就是为什么他只为他使用自定义类......用库试试吧

标签: android image android-activity canvas crop


【解决方案1】:

您应该能够使用 PorterDuff 来实现这一点。我粘贴了一个示例,该示例将使用蓝色蒙版裁剪大黄色背景。

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

        //create a second canvas
        Bitmap mask = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(mask);

        Rect cropRect = new Rect(100, 100, 400, 400);

        Paint p = new Paint();
        p.setAntiAlias(true);
        p.setColor(Color.BLUE); //color doesn't matter
        c.drawRect(cropRect, p); //draw the crop rect first

        p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //change transfer mode

        p.setColor(Color.YELLOW);//draw your original image/content here, pretty much whatever you wanted to draw
        c.drawRect(0, 0, getWidth(), getHeight(), p); 

        canvas.drawBitmap(mask, 0, 0, null); //draw the result back onto the canvas

    }

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2021-12-03
    • 2017-05-18
    • 2021-07-24
    相关资源
    最近更新 更多