IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Problème avec Canvas


Sujet :

Composants graphiques Android

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut Problème avec Canvas
    Présentation
    Dans le dossier "drawable-mdpi": une image de 556px par 556px nommée "b5"
    Sur le main layout un ImageView dont la source est "b5"

    But visé
    Dessiner sur une image bitmap puis affecter celle-ci à l'imageview.

    Problème
    1.Code légèrement simplifié pour illustrer le probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //creation d'un bitmap qui sera dessiné sur b5
    Bitmap icone= BitmapFactory.decodeResource(getResources(), R.drawable.icon);
    //creation d'un bitmap temporaire avec b5 non modifié
    Bitmap b= BitmapFactory.decodeResource(getResources(), R.drawable.b5);
    Canvas c = new Canvas(b);
    //on dessine sur le canvas mTextpaint est créé..j'ai juste omis de copier le bout de code
    c.drawBitmap(icone,0,0,mTextPaint);
    //on affecte l'image a l'imageview
       BoardImage.setImageBitmap(b);
    Ça plante à la ligne "Canvas c = new Canvas(b);"

    2.Si je déplace l'image b5 dans "drawable-hdpi" alors ça ne plante pas mais l'image est légèrement déformée (c'est normal)

    3.Si je remplace la ligne de creation du bitmap par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b=BoardImage.getDrawingCache();

    Alors ça fonctionne...pourtant le BoardImage a bien "b5" dans mdpi comme source.

    4.Finalement voici ma méthode temporaire peu élégante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Bitmap e = BitmapFactory.decodeResource(getResources(),R.drawable.b5);  
     
            Bitmap b= Bitmap.createBitmap(556, 556, Bitmap.Config.ARGB_8888);
        	Canvas c = new Canvas(b);  	
        	c.drawBitmap(e, 0, 0, mTextPaint);
        	c.drawBitmap(icone,0,0,mTextPaint);
        	BoardImage.setImageBitmap(b);
    Je crée un bitmap contenant "b5" (appelé "e")
    Je crée un bitmap vide (appelé "b")
    Je crée un canvas pour "b"
    Je dessine "e" sur le canvas
    Je dessine "icone" sur le canvas.
    J'affecte le tout a l'imageview


    Bon ça marche mais je ne comprend pas pourquoi je ne peux pas affecter un canvas à un bitmap qui charge une image ressource qui se trouve dans"drawable-mdpi".

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Ça plante à la ligne "Canvas c = new Canvas(b);
    Peux tu nous dire l'erreur que tu obtiens ?

    Sinon vu de nez :

    public Canvas (Bitmap bitmap)

    Since: API Level 1
    Construct a canvas with the specified bitmap to draw into. The bitmap must be mutable.
    The initial target density of the canvas is the same as the given bitmap's density.
    Parameters

    bitmap Specifies a mutable bitmap for the canvas to draw into.
    Donc essaye comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BitmapFactory.Options opt = BitmapFactory.Options();
    opt.inMutable = true;
    Bitmap b= BitmapFactory.decodeResource(getResources(),R.drawable.b5,opt );
    Canvas c = new Canvas(b);

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Donc essaye comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BitmapFactory.Options opt = BitmapFactory.Options();
    opt.inMutable = true;
    Bitmap b= BitmapFactory.decodeResource(getResources(),R.drawable.b5,opt );
    Canvas c = new Canvas(b);
    Ça marche nickel. Merci bcp de la solution rapide!.

    Maintenant je me questionne à savoir pourquoi j'ai pas besoin de rendre le bitmap "mutable" lorsqu'il se trouve dans le dossier hdpi...m'enfin je peux vivre sans savoir

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Maintenant je me questionne à savoir pourquoi j'ai pas besoin de rendre le bitmap "mutable" lorsqu'il se trouve dans le dossier hdpi...m'enfin je peux vivre sans savoir
    Normalement cela n'aurait pas du fonctionner .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Canvas TextOut
    Par dadouuuu dans le forum Débuter
    Réponses: 4
    Dernier message: 22/12/2010, 10h08
  2. problème avec canvas
    Par nouvelesprit dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 23/04/2010, 19h45
  3. Problème avec Canvas.ActualHeight
    Par Manhuman dans le forum Silverlight
    Réponses: 2
    Dernier message: 29/05/2009, 09h07
  4. Problème avec Canvas et drawImage
    Par marmarnas dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 01/04/2008, 11h26
  5. [D6] Problème de canvas avec MessageDlg
    Par dridri86 dans le forum Langage
    Réponses: 9
    Dernier message: 12/07/2005, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo