0

在我的应用程序中,我扩展了 ImageView 并覆盖了它的 onDraw() 方法。我正在使用颜色过滤器来操作位图以添加一些效果,如反转、灰度等。绘制位图后,我试图保存它,但我只能保存原始位图而没有添加效果。这是 onDraw() 和 save 方法的代码:

protected void onDraw(Canvas canvas)
{
    Paint paint = mPaint;
    //cmf is the color matrix filter
    paint.setColorFilter(cmf);

    if(mBitmap != null)
    {
        canvas.drawBitmap(mBitmap, offsetW, offsetH, paint);
    }
}

保存位图的代码:

 try
        {
            FileOutputStream fout = new FileOutputStream(path);

            mBitmap.compress(CompressFormat.JPEG, 100, fout);
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }

难道我做错了什么?任何帮助将不胜感激。

4

1 回答 1

1

您正在显示的画布上绘画,原始位图没有改变。您应该创建一个新的位图并在其上绘画。当颜色矩阵过滤器更改时,请执行以下操作:

Bitmap tmp = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap.getConfig())
Canvas canvas = new Canvas(tmp)
cnvas.drawBitmap(tmp, 0, 0, paint);

然后,您可以使用此 tmp 位图将其绘制并保存。

而不是使用自定义ImageView使用普通的并将其图像设置为这个新的位图:

imageView.setImageBitmap(tmp)
于 2012-10-10T09:09:05.547 回答