Créer un fichier jpeg à partir d'une SurfaceView
Bonjour,
J'ai une SurfaceView créée à partir d'un layout, le Holder associé et j'utilise la méthode run pour le graphique.
En cherchant sur le net pour mon problème de création de jpeg, j'ai trouvé un exemple que j'ai mis en oeuvre.
Il faut créer un bitmap aux dimensions du canvas:
Code:
1 2
|
Bitmap myBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); |
attacher le canvas au bitmap pour qu'il écrive dedans:
Code:
1 2
|
canvas.setBitmap(myBitmap); |
puis transférer le bitmap dans un fichier en compressant:
Code:
1 2
|
myBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); |
Le résultat est que j’obtiens une SurfaceView noire due à l'attachement du canvas au bitmap. Quand je commente cette instruction mon graphique se déroule normalement.
Merci pour votre aide, ci après la partie run de mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
@Override
public void run() { // le run du graphique
while(locker){
if(!holder.getSurface().isValid()){
continue;
}
Canvas canvas= holder.lockCanvas();
Bitmap myBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(myBitmap); // attache canvas à bitmap (c'est le problème)
draw(canvas); // tracer
if (num_essai==n_essai) { // stocke image sur sd
OutputStream fOut = null;
File f = new File(Environment.getExternalStorageDirectory()+ File.separator + "test.jpg");
try {
fOut = new FileOutputStream(f);
} catch (FileNotFoundException e) {}
myBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
try {
fOut.flush();
fOut.close();
}
catch (IOException e) {}
}
// fin de tracé
holder.unlockCanvasAndPost(canvas);
try {thread.sleep(300);} catch (InterruptedException e) {}
}
} |