2012-03-28 2 views
7

Ich verwende Bitmap zum Erstellen digitaler Signatur Image. Beim Speichern der Unterschrift auf dem Gerät wurde nur die Unterschrift mit schwarzem Hintergrund gespeichert. Ich möchte grünen Hintergrund mit Unterschrift.Android: Bitmap: Wie kann Leinwand mit grünem Hintergrund in Android gespeichert werden?

Hier ist es mein Bitmap-Code

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

kann ich der Lage, den grünen Hintergrund zu sehen, während Signatur zu schaffen, aber es ist auf schwarzem Blackground gespeichert. Bitte helfen Sie mir, Vielen Dank im Voraus

+0

post die saveAsJpg() -Methode Code .... – himanshu

+1

@rahul brauchen wir, weil Leinwand Hintergrund setzen in 'onSizeChanged' Methode füllen Bitmap, die Sie zum Speichern verwendet haben, verwenden 'canvas' von' onSizeChanged', und Sie haben Canvas Farbe in 'onDraw' gesetzt, so dass es angezeigt wird, aber es gilt nicht für Bitmap. Überprüfen Sie meinen aktualisierten Code. – Herry

Antwort

14

@rahul Sie auch diese in verwenden können onDraw

canvas.drawColor(Color.GREEN); 

Überprüfen Sie bitte Update meines Codes

@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

Try Änderung dieses in OnDraw

canvas.drawColor(0xFFFF0000); 
+0

Aber es spart nicht mit grünem Hintergrund eher speichert es mit schwarzer Hintergrundfarbe. Bitte hilf mir. Wo ich falsch liege, weiß ich nicht ... Danke Sachi –

+0

@rahul kannst du mir deinen Code in 'saveAsJpg (mBitmap) zeigen;'. – Herry

0

Versuchen Sie diesen Code zum Speichern der Datei

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

Wie Sie gepostet haben, dass Sie speichern möchten, wird dies funktionieren.

1

canvas.drawColor ändert die Leinwand, aber nicht die Bitmap Sie das Bitmap mit

bitmap.eraseColor(color); 
Verwandte Themen