2012-03-28 4 views
7

Sto utilizzando Bitmap per la creazione di immagini di firma digitale. Durante la memorizzazione della firma sul dispositivo, solo la firma è stata memorizzata con sfondo nero. Voglio sfondo verde con firma.Android: Bitmap: come salvare la tela con sfondo verde in Android?

Qui è il mio codice Bitmap

// 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; 
    } 

posso in grado di vedere lo sfondo verde durante la creazione della firma, ma viene salvato sul blackground nero. ti prego di aiutarmi, Grazie in anticipo

+0

pubblicare il saveAsJpg) codice del metodo (.... – himanshu

+1

@rahul abbiamo bisogno di impostare lo sfondo di tela in 'Metodo onSizeChanged' perché Bitmap che hai usato per salvarlo usa 'canvas' di' onSizeChanged', E hai impostato il colore Canvas in 'onDraw', quindi verrà mostrato, ma non si applica a Bitmap. Controlla il mio codice aggiornato. – Herry

risposta

14

@rahul È inoltre possibile utilizzare questo in onDraw

canvas.drawColor(Color.GREEN); 

Si prega di verificare l'aggiornamento del mio codice

@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

cambio Da questo OnDraw

canvas.drawColor(0xFFFF0000); 
+0

Ma non sta salvando con uno sfondo verde, piuttosto che memorizza con il colore di sfondo nero. Per favore aiutatemi. Dove sto andando male non so ... Grazie Sachi –

+0

@rahul puoi mostrarmi il tuo codice in 'saveAsJpg (mBitmap);'. – Herry

0

Prova questo codice per il salvataggio del file

FileOutputStream fos = new FileOutputStream(Yourpath); 
bitmap.compress(CompressFormat.JPEG, 80, fos); 

Come hai postato che vuoi salvare questo funzionerà.

1

canvas.drawColor cambia la tela, ma non il bitmap che si può riempire la bitmap con

bitmap.eraseColor(color);