2011-08-16 13 views
0

に私はカラーフィルターAndroidのキャンバス保存SD

にこの私のコード

 int color = mPaint.getColor(); 
    f = new LightingColorFilter(color, 1); 
    mPaint.setColorFilter(f); 


    myBmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon10); 
    canvas.drawBitmap(myBmp, 20, 20, mPaint); 
    canvas.save(); 
    canvas.restore();` 

を使用してキャンバス上の画像を作成し、その後、私はそれを動作が

  OutputStream outStream = null; 
      File file = new File(extStorageDirectory, "er.PNG"); 
      try { 
      outStream = new FileOutputStream(file); 
      myBmp.compress(Bitmap.CompressFormat.PNG, 85, outStream); 
      outStream.flush(); 
      outStream.close(); 

      Toast.makeText(Draw.this, "Saved", Toast.LENGTH_LONG).show(); 

      } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Toast.makeText(Draw.this, e.toString(), Toast.LENGTH_LONG).show(); 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Toast.makeText(Draw.this, e.toString(), Toast.LENGTH_LONG).show(); 
      } 

だSDカードに保存したいですしかし、問題がある、SD上の私の画像は古い画像(フィルタではない)

私はこの問題を修正できますか?、ありがとう

+0

古いファイルを削除して新しいファイルを保存するか、おそらく新しいファイル名をfilename + "_filtered.png"に変更するだけです。 –

答えて

1

ビットマップに描画する必要があります。以下を試してみてください:

int color = mPaint.getColor(); 
f = new LightingColorFilter(color, 1); 
mPaint.setColorFilter(f); 
Bitmap outBitmap = Bitmap.Create(myBmp.getWidth(),myBmp.getHeight(),Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(outBitmap); 
canvas.drawBitmap(myBmp,20,20,mPaint); 

あなたが「保存する」(outBitmap)をSDカードに保存することができます。 BitmapFactoryでBitmapを開いていると、不変のビットマップが表示され、描画できなくなります。 そのため、tempを作成する必要があります。ビットマップ、描画のためにCanvasを接続し、描画と保存ができます。

関連する問題