在我的应用程序中,我扩展了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();
}
我做错了吗?任何帮助都会受到欢迎。
答案 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}}