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:
attacher le canvas au bitmap pour qu'il écrive dedans:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Bitmap myBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
puis transférer le bitmap dans un fichier en compressant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 canvas.setBitmap(myBitmap);
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 myBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
Merci pour votre aide, ci après la partie run de mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) {} } }
Partager