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 に答える