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

Android Discussion :

Modifier l'apparence de drawText, draw Line, ..


Sujet :

Android

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Modifier l'apparence de drawText, draw Line, ..
    Bonjour à toutes et à tous,

    Ayant réussi par un heureux hasard au bout d'une journée à créer une nouvelle application avec Android Studio, j'y ai un problème de dessin.

    Pour monter des problèmes de vision, je veux afficher le résultat d'opérations telles que le floutage en travaillant au niveau de chaque pixel (calcul matriciel sur les pixels voisins). cela se fait sans problème sur un bitmap avec les opérations getPixel() et setPixel().

    Je voudrais faire la même chose, mais sur les formes tracées à l'aide de fonctions telles que drawText(), drawLine(), ...

    Comment s'y prendre ? Y a-t-il un moyen de récupérer le bitmap sur lequel a agit drawText(), drawLine(), ... auquel cas je me retrouverais à travailler sur un bitmap.

    Cordialement.

    Pierre

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    J'imagine que tu utilise un Canvas pour dessiner.

    Il faut donc assigner une bitmap à ton canvas.
    Pour ce faire tu créer une bitmap à la bonne taille , par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap myBitmap = Bitmap.createBitmap(800, 600, Config.RGB_565));
    Ensuite tu assigne la bitmap à ton canvas , soit via le constructeur soit via le setter approprié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas c = new Canvas(myBitmap);
    ou
    Tu fais tes dessins sur le canvas.

    Puis quand tu en as besoin tu n'as plus qu'à utiliser la bitmap.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci grunk pour cette proposition.

    De mon côté, j'ai trouvé la solution suivante, qui est semblable à la tienne et qui fonctionne :

    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
    	public class Dessin extends View { // Zone de dessin
     
    		Bitmap page;
     
    		public Dessin(Context context) {
    			super(context);
    			this.setDrawingCacheEnabled(true);
    			}
     
    		@Override
    		protected void onDraw(Canvas cnv) {
    			page = Bitmap.createBitmap(this.getDrawingCache(false));
    			cnv.drawText("Mon Texte", 10, 100, paint);
    			cnv.drawBitmap(page, 0, 0, paint);
    		}
    	}
    A mon sens, si cela fonctionne, c'est parce que j'utilise le canevas de ma classe Dessin.

    Dans le cas que tu me proposes, il doit falloir attacher ce canevas à une View ? et si oui, comment fait-on ?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ce que tu fais dans le code que tu présente
    - c'est récupérer le cache du canvas.
    - L'écrire dans une bitmap
    - Redessiner cette bitmap sur le canvas.

    Il te manque un traitement sur ta bitmap pour la modifier mais dans l'idée ca doit fonctionner
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Oui, grunk, je fais à peu près la même chose que toi, à cette différence que mon Canvas "final" (cnv dans le code ci-après) est attaché à une View. Le Canvas transitoire (canevas dans le code) ne sert qu'à dessiner dans le bitmap "page". :

    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
    37
    38
    		page = Bitmap.createBitmap(800, 200, Bitmap.Config.ARGB_8888);
    		canevas = new Canvas(page);
    		w = page.getWidth();
    		h = page.getHeight();
    		tab = new int[w * h];
     
    		modif = (Button) findViewById(R.id.Modif);
     
    		modif.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				canevas.drawText("Tout plein de texte", 00, 20, paint);
    				page.getPixels(tab, 0, w, 0, 0, w - 1, h - 1);
    				int[] res = tab.clone();
    				int j = 0;
    				for (int i = 0; i < w * h; i++) { // Ce traitement ne fait qu'un décalage de 30 lignes
    					j = i + 30 * w;
    					if (j < tab.length - 1) {
    						res[j] = tab[i];
    					}
    				}
    				page.setPixels(res, 0, w, 0, 0, w - 1, h - 1);
    				dessin.invalidate();
    			}
    		});
    	}
     
    	public class Dessin extends View { // Zone de dessin
     
    		public Dessin(Context context) {
    			super(context);
    		}
     
    		@Override
    		protected void onDraw(Canvas cnv) {
    			cnv.drawBitmap(page, 0, 0, paint); // Dessin du bitmap dans la View "dessin"
    		}
    	}
    Je m'oriente vers ta solution, car la reprise du cache ne me paraît pas évidente à gérer : le premier bout de code que j'avais donné a été le fruit de tâtonnement pour placer au bon endroit et pour que cela fonctionne le placement des instructions d'activation du cache et sa copie dans un Bitmap.

    Par contre, et c'était là ma question, comment attaches-tu ton Canvas à une View. Moi, j'ai utilisé le Canvas proposé par la méthode onDraw() de ma View "dessin". Tu as peut-être plus simple.

    NOTA : pour moi, sémantiquement, la classe Canvas n'a jamais été autre chose qu'une boîte à outils pour dessiner dans un Bitmap. Dois-je y voir autre chose ?

    Cordialement.

    Pierre

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Moi, j'ai utilisé le Canvas proposé par la méthode onDraw()
    En fait soit tu dessined directement sur la vue , ce que tu fais ici , soit tu dessines sur un canvas que tu peux ensuite transformer en bitmap. Quel est l'id"al ? je ne saurait pas te dire.

    Voir : http://developer.android.com/guide/t...-graphics.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Regedit]modifier l'apparence de la fenetre connexion?
    Par mzt.insat dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 10/12/2005, 13h37
  2. Comment modifier l'apparence d'un Form ?
    Par [Silk] dans le forum Composants VCL
    Réponses: 3
    Dernier message: 26/07/2005, 13h44
  3. Réponses: 4
    Dernier message: 24/07/2005, 20h14
  4. [C#] Comment modifier l'apparence d'un DataGrid?
    Par DBBB dans le forum ASP.NET
    Réponses: 8
    Dernier message: 15/07/2005, 14h41

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