从自定义ImageView获取修改的位图

时间:2019-03-25 23:52:17

标签: android android-imageview android-canvas android-bitmap

我有一个扩展了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_parentadjustViewBoundsscaleTypefitCentersuper(context, TABLE_NAME, null, 1);,以保持宽高比并相应地使图像居中。

0 个答案:

没有答案