我有一个扩展了ImageView
的图像编辑视图。 setImageBitmap()
在ImageView
上被外部调用。用户可以在此视图上绘制线条,这些线条看起来似乎是在ImageView上设置的位图上绘制的。
我的目标是在绘制线条后获得修改后的位图,该位图将用于逐像素比较,以与原始位图创建差异。这是绘制代码:>
public class MyImageView extends ImageView{
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawLine(0, 0, 20, 20, p); //dynamic values in app
}
}
在其他帖子上建议的方法是使用getDrawingCache()
,它返回一个bitmap
,返回一个ImageView
的“快照”,并因此返回经过修改的bitmap
。除了现在不赞成使用该方法外,它还不尊重原始位图的分辨率,因此所以我无法与原始bitmap
进行逐像素比较。例如,如果我的原始位图在ImageView中的宽度和高度为match_parent
并且adjustViewBounds
设置为true,则为2x4,则getDrawingCache()
返回大小为1020x1440
的位图。我也许可以将修改后的位图缩放为位图大小,但是不确定是否会丢失基于设备密度的重要数据。
我还应该添加一个重要的细微差别。我的ImageView
的宽度/高度为match_parent
,adjustViewBounds
为scaleType
,fitCenter
为super(context, TABLE_NAME, null, 1);
,以保持宽高比并相应地使图像居中。