2014-06-10 3 views
1

Je veux convertir la toile en image et l'enregistrer sur l'appareil. Mais quand j'ai mis bitmap à la toile j'obtiens l'erreur java.lang.UnsupportedOperationException. Mon code complet:Android setBitmap to canvas

public class SingleTouchEventView extends View { 
private Paint paint = new Paint(); 
private Path path = new Path(); 


public SingleTouchEventView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    paint.setAntiAlias(true); 
    paint.setStrokeWidth(6f); 
    paint.setColor(Color.WHITE); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.BEVEL); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
    canvas.drawCircle(50, 50, 3, paint); 
    Bitmap bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); 
    canvas.setBitmap(bitmap); 
    try { 

     File file = new File(Environment.getExternalStorageDirectory() + "/image.jpg"); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(file)); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

}

Peut-être que quelqu'un pourrait me aider à résoudre ce problème?

Répondre

5

Ce n'est pas comment vous dessinez un bitmap. Vous n'utilisez PAS le canevas qui dessine à l'écran. Vous créez un second canevas, en passant dans le bitmap que vous souhaitez dessiner en tant que paramètre dans le constructeur. Ensuite, toutes les commandes draw de ce canevas dessineront le bitmap. Ensuite, vous dessinez cette bitmap à l'écran. Quelque chose comme ceci:

Canvas myCanvas = new Canvas(myBitmap); 
myCanvas.drawLine(); 
myCanvas.drawCircle(); 
//Insert all the rest of the drawing commands here 
screenCanvas.drawBitmap(myBitmap, 0, 0); 

Je ne serait pas aussi écrire sur le système de fichiers dans onDraw - J'attends les performances de dessin à souffrir mal si vous le faites. Un appel de fonction séparé peut le faire. Si vous gardez myBitmap dans une variable, vous pouvez simplement le compresser à tout moment pour écrire le dernier tirage sur le disque.