我有一个从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)
似乎也可以翻译位图。
答案 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);
}