保存在Canvas上绘制的位图

时间:2012-10-10 09:04:33

标签: android bitmap colormatrixfilter

在我的应用程序中,我扩展了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();
        }

我做错了吗?任何帮助都会受到欢迎。

1 个答案:

答案 0 :(得分: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) 并将其图像设置为此新位图:

{{1}}