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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 canvas.setBitmap(myBitmap);
puis transférer le bitmap dans un fichier en compressant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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) {}
        }
    }