Objet Bitmap, adamter automatiquement la taille...

Signaler
Messages postés
68
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
14 septembre 2007
-
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
-
Salut

Je crée un objet Bitmap en mémoire (classe qui hérite de Image) et j'ajoute ensuite dedans des rectangles de polygones, des traits, etc... (pour dessiner un logigramme en fait) avec les objets Graphics, Pen et SolidBrush.

Ca marche très bien sauf pour une chose, la taille de l'image quand je fait bmp.Save(...). En fait ça m'enregistre une image avec la taille que j'ai défini au moment du bmp = new Bitmap(640, 480) et si les dessins que j'ai rajouté a l'intérieur font que l'image doit être plus grande, je ne sais pas comment faire pour faire une "auto scale" en quelques sortes, pour que la taille de l'image générée soit la bone par rapport aux pixels à l'intérieur.

Voila donc si qqn peut m'aider pour ça, ça serait sympa merci.

10 réponses

Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Il y a une chose que je ne comprends pas, tu crée un Bitmap 640*480.
Si tu rajoute des dessins dedans (rectangle, polygones...), commet peux-tu dessiner des objets plus grand que leur conteneur et les ajouter sans qu'il y ait de problèmes ?

"Une chose me laisse perplexe : Est-ce moi ou les autres qui sont fous ?" A. Einstein
<!--
Messages postés
68
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
14 septembre 2007

En fait le truc, c'est que si je fais une bitmap en 640 * 480, si je dessine sur le pixel 700, 500, ça ne plante pas, pas d'exception non plus, et je ne suis pas sur que le point soit enregistré en mémoire mais tout porte a croire que oui  lOl.

Donc en fait il me faudrait une méthode pour adapter la taille de l'image quoi... et je sais pas comment faire  
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Je ne crois pas qu'il soit possible de redimenssioner une Bitmap.
La solution pourrait résider dans la création d'un nouveau Bitmap aussi grand que necessaire dans lequel tu copie le "petit" bitmap et tes nouveaux objets.

Bitmap b1 = new Bitmap(640,480);
Pour reprendre ton exemple, tu dessine un pixel 700,500, donc en dehors de la limite de ta Bitmap b1.
Tu va donc créer une nouvelle bitmap qui pourra contenir tout ce que tu as fait dans b1 plus le fameux pixel
Bitmap b2 = new Bitmap(701,501);
Puis tu recopie le contenu (je sais pas comment faire par contre).

Mias dans l'absolue, tu ne devrait pas pouvoir ajouter un pixel en dehors de la limite fixée par la Bitmap lors de l'instanciation.

"Une chose me laisse perplexe : Est-ce moi ou les autres qui sont fous ?" A. Einstein
<!--
Messages postés
68
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
14 septembre 2007

Il y a un des constructeur de la classe Bitmap qui crée une image avec le contenu d'une autre et de nouvelles dimensions, mais le souci, c'est que la nouvelle image créée elle aura bien la nouvelle taille, mais ça va juste étirer les dessins qui étaient deja dedans.

Il n'y a pas un moyen de faire ça mais mais san étirer ?

Merci pour tes réponses en tout cas Néo
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Franchement, je n'en sais rien :p

Cela dit, c'est fort probable qu'il existe un moyen. Peut être des paramètre à spécifier.
Mais j'aimerai savoir pourquoi tu créer une image si petite si tu sais que tu va créer des objets en dehors de cete image ?

"Une chose me laisse perplexe : Est-ce moi ou les autres qui sont fous ?" A. Einstein
<!--
Messages postés
68
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
14 septembre 2007

Non en fait je crée un logigramme a partir d'un code source.
Et en fait le logigramme est simplifié, càd que je ne prend en compte que quelques instructions.
Et je peu avoir aussi bien une image toute petite genre 100 * 150, que très grande 1024 * 4096
Donc vu que la génération de ces image prend beaucoup de temps surtout pour les grandes tailles, c'est itéressant pour moi d'avoir une taille dynamique.
Voila koi...

(pour info, le dessin du logigramme fonctionne super bien, sans croisements, avec tous les décalages géré comme il faut en cas d'imbrication de conditions et tout ;) lol c ma ptite fierté ^^ )

Bon continuons de chercher ... lol

merci en tout cas
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut,



"En fait le truc, c'est que si je fais une bitmap en 640 * 480, si je dessine sur le pixel 700, 500, ça ne plante pas, pas d'exception non plus, et je ne suis pas sur que le point soit enregistré en mémoire mais tout porte a croire que oui  lOl."


Non, sinon tes dessins écraseraient ce qui se trouve juste après ton bitmap en mémoire.



"Il n'y a pas un moyen de faire ça mais mais san étirer ?"


Bitmap bmp01 = new Bitmap( 640, 480 );


// dessine un cercle dans le bitmap 1.
using ( Graphics g = Graphics.FromImage( bmp01 ) )
{
    g.Clear( Color.Black );
    g.DrawEllipse( Pens.White, 10, 10, 110, 110 );
}



Bitmap bmp02 = new Bitmap( 800, 600 );



// Dessine le bitmap 1 dans le bitmap 2.
using ( Graphics g = Graphics.FromImage( bmp02 ) )
{
    g.Clear( Color.Black );
    g.DrawImage( bmp01, 0, 0, bmp01.Width, bmp01.Height );
}
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Ok ben ça ressemble à ce que je pensait.

Par contre, peux-tu rapidement m'expliquer à quoi sert le mot clef using et ce qu'il représente Lutinore ?
"Une chose me laisse perplexe : Est-ce moi ou les autres qui sont fous ?" A. Einstein
<!--
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
La méthode Dispose de l'objet Graphics sera appellée implicitement à la sortie du bloc using.. même en cas d'exception.
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Merci pour l'info,
je viens de tomber sur le site de Microsoft qui en parle using, instruction (C#)

"Une chose me laisse perplexe : Est-ce moi ou les autres qui sont fous ?" A. Einstein
<!--