2012-03-28 7 views
7

私はデジタル署名の画像を作成するためにビットマップを使用しています。署名をデバイスに保存している間は、署名のみが黒い背景で保存されていました。私は署名付きの緑の背景が欲しい。Android:ビットマップ:アンドロイドに緑の背景を持つキャンバスを保存するには?

ここでは、私が署名を作成しながら、緑色の背景を見ることができることができますが、それは黒blackground上に保存されて

// Bitmap View 
public class MyView extends View implements OnClickListener 
{ 
    public int height; 
    public int width;  
    private Bitmap mBitmap;   
    private Path mPath; 
    private Paint mBitmapPaint; 

    public MyView(Context c) 
    { 
     super(c); 
     mPath = new Path(); 
     mBitmapPaint = new Paint(Paint.DITHER_FLAG); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) 
    { 
     super.onSizeChanged(w, h, oldw, oldh); 
     Wid = w; 
     Ht = h; 
     mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);    
     mCanvas = new Canvas(mBitmap);  

    } 

    @Override 
    protected void onDraw(final Canvas canvas) 
    { 

     canvas.drawColor(0xFFFFFFFF);  
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 

     // onclick listner for SAVE button 
     saveButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       //capture the image 
       try {      
        saveAsJpg(mBitmap);  
        startActivity(new Intent(Paint.this, SignatureActivity.class)); 
        finish(); 
       } catch (IOException e) {     
        e.printStackTrace(); 
       } 
      } 
     });    
    } 

    private float mX, mY; 
    private static final float TOUCH_TOLERANCE = 4; 

    private void touch_start(float x, float y) 
    { 
     mPath.reset(); 
     mPath.moveTo(x, y); 
     mX = x; 
     mY = y; 
     System.out.println("---- " +mX); 
    } 
    private void touch_move(float x, float y) 
    { 
     float dx = Math.abs(x - mX); 
     float dy = Math.abs(y - mY); 
     if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
      mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 
      mX = x; 
      mY = y; 
     } 
    } 
    private void touch_up() 
    { 
     mPath.lineTo(mX, mY); 
     // commit the path to our offscreen 
     mCanvas.drawPath(mPath, mPaint); 

     // kill this so we don't double draw 
     mPath.reset(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 

     float x = event.getX(); 
     float y = event.getY(); 

     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      touch_start(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      touch_move(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      touch_up(); 
      invalidate(); 
      break; 

     } 
     return true; 
    } 

私のビットマップコードです。事前

+0

でビットマップを埋めることができ、ビットマップはsaveAsJpg()メソッドのコードを投稿しません....私たちはので 'onSizeChanged'方法でキャンバスの背景を設定する必要があります – himanshu

+1

@rahulそれを保存するために使用したビットマップは、 'onSizeChanged'の' canvas'を使用しています。そして 'onDraw'にキャンバスの色を設定しましたので、表示されますが、ビットマップには適用されません。 – Herry

答えて

14

でこれを変更してください、私を助けてください私のコード

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);    
    mCanvas = new Canvas(mBitmap); 
    mCanvas.drawColor(Color.GREEN); 
    super.onSizeChanged(w, h, oldw, oldh); 
} 
の更新をチェックしてください。
1

のおかげではonDraw

あなたはまた、 onDraw

canvas.drawColor(Color.GREEN); 

でこれを使用することができます@rahul

canvas.drawColor(0xFFFF0000); 
+0

しかし、緑色の背景色で保存するのではなく、緑色の背景で保存しません。私を助けてください。私が間違っているところは知りません...ありがとうサチェ –

+0

@rahulはあなたのコードを 'saveAsJpg(mBitmap);'に表示できます。 – Herry

0

ファイルを保存するためにこのコードを試してください

これを保存しておきたいので、これが機能します。

1

canvas.drawColorはキャンバスを変更しますが、あなたは

bitmap.eraseColor(color); 
関連する問題