【问题标题】:Android clip Picture to Bitmap. Is Possible?Android 剪辑图片到位图。有可能吗?
【发布时间】:2014-05-29 21:01:05
【问题描述】:

我有一个从 SVG 文件加载的图片对象,并且我设置了 hardwareAccelerated=false 以使其适用于所有设备。

由于 android 4.0.4 存在错误,我必须将图片转换为位图,然后这样做:

...
...
public void draw(Canvas canvas) {
    ...
    ...

    //myPicture size is 9000x5000 but I want to display only this portion
    clipRect.set(50, 50, 370, 530);
    Bitmap bmp = getBitmapFromPicture(myPicture, clipRect);
    canvas.drawBitmap(bmp, 0, 0, null);
    bmp.recycle();
    ...
    ...
}

public static Bitmap getBitmapFromPicture(Picture picture, RectF clipRect) {
    Bitmap bitmap = Bitmap.createBitmap(Math.round(clipRect.width()), Math.round(clipRect.height()), Config.RGB_565);
    Canvas canvas = new Canvas(bitmap);
    canvas.drawPicture(picture);
}

现在我想剪辑图片,因为我只想显示它的可见屏幕部分。 但 canvas.drawPicture 不接受 srcRect 参数。 怎么可能做到这一点?


编辑:

通过翻译画布:canvas.translate(-50, -50) 似乎也翻译了位图。

【问题讨论】:

    标签: android svg bitmap android-drawable android-bitmap


    【解决方案1】:

    你需要在画布上设置一个变换。

    要将图片在 50,50 处向下移动,使其位于位图上(即 0,0 处),只需执行以下操作:

    canvas.translate(-50, -50);
    

    所以你的方法变成了:

    public static Bitmap getBitmapFromPicture(Picture picture, RectF clipRect)
    {
        Bitmap bitmap = Bitmap.createBitmap(Math.round(clipRect.width()),
                                            Math.round(clipRect.height()),
                                            Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        canvas.translate(-clipRect.left, -clipRect.top);
        canvas.drawPicture(picture);
    }
    

    【讨论】:

    • 我已经尝试过了,但它会导致左上角出现黑色边框。我认为是因为它翻译了位图,然后它绘制了填充画布边界的图片,最后恢复了位图位置,但 50,50(顶部,左侧)尚未绘制
    • 我出错了。我应该说“顶部”而不是“底部”。不确定它是否会为您带来任何改变。您正在使用哪个库。它是否在绘制任何东西。您对正在发生的事情的描述不是很有用。你可以在某处发布屏幕截图吗?
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 2011-04-30
    • 2011-07-31
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多