【问题标题】:How to crop image inside the path drawn using draw path on canvas,Android如何在使用画布上的绘制路径绘制的路径内裁剪图像,Android
【发布时间】:2013-12-27 07:41:44
【问题描述】:

我可以在Canvas 上使用moveTo()lineTo() 命令绘制一个矩形。我现在要做的是裁剪位于这个正方形内的位图。

这是我的onDraw() 方法:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    drawPath.moveTo(topLeft.x, topLeft.y);
    drawPath.lineTo(topRight.x, topRight.y);
    drawPath.lineTo(bottomRight.x, bottomRight.y);
    drawPath.lineTo(bottomLeft.x, bottomLeft.y);
    drawPath.lineTo(topLeft.x, topLeft.y);
    drawCanvas = new Canvas(canvasBitmap);
    canvas.drawPath(drawPath, drawPaint);
    canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
}

【问题讨论】:

    标签: android android-canvas android-view android-custom-view


    【解决方案1】:

    试试这个:

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawPath.moveTo(topLeft.x, topLeft.y);
        drawPath.lineTo(topRight.x, topRight.y);
        drawPath.lineTo(bottomRight.x, bottomRight.y);
        drawPath.lineTo(bottomLeft.x, bottomLeft.y);
        drawPath.lineTo(topLeft.x, topLeft.y);
        canvas.clipPath(drawPath);
        canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
    }
    

    如果drawPath 始终是一个矩形,您可以使用Canvas.clipRect()。这是使用clipRect()重写的相同代码:

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.clipRect(left, top, right, bottom);
        canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
    }
    

    【讨论】:

    • 这不起作用。它给了我整个位图,而不仅仅是这些路径中的区域。我想要的是当我绘制一个路径(假设是一个正方形)然后生成的位图应该在这些路径(正方形)内有区域。请帮我解决这个问题……我已经 3 天了……
    • 尝试关闭硬件加速。硬件加速视图不支持正确裁剪。如果您需要有关硬件加速的信息,请阅读此内容:developer.android.com/guide/topics/graphics/hardware-accel.html
    • 关闭硬件加速有帮助吗?
    • @GareginSargsyan...嘿,谢谢您的解决方案...我还没有检查它,因为目前我正在做其他事情...但很快我将不得不完成这个裁剪模块,溶胶将那就让你知道..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2021-06-25
    • 2013-12-20
    • 2014-10-01
    • 2012-08-15
    相关资源
    最近更新 更多