Android剪辑图片到位图。可能吗?

时间:2014-05-29 21:01:06

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

我有一个从SVG文件加载的Picture对象,我已经设置了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)似乎也可以翻译位图。result picture

1 个答案:

答案 0 :(得分:0)

您需要在画布上设置变换。

要将图片的部分向下移动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);
}