OVH Cloud OVH Cloud

question a ceux qui connaissent gdiplus.dll

6 réponses
Avatar
giova
salut a tous.

Je suis en train de découvrir la dll gdiplus, je tiens a preciser que je
suis débutant.

quelquechose me surprend :

la methode FromFile de la classe Image. Je penssais qu'a l'inverse du
constructeur Bitmap cette methode remplacait l'image native contenue
dans l'objet bitmap par une nouvelle image native.
Or je me rends compte qu'en fait cette methode crée un nouvel objet Bitmap.

resultat a mes yeux cette methode a les memes concesquences que si l'on
appellait tout simplement un nouveau constructeur Bitmap. Bitmap( const
WCHAR *filename, BOOL useIcm);

(The FromFile method creates a Bitmap object based on an image file.)

d'ou ma question : quel est l'interret de cette methode? ou il y a t'il
quelque chose qui m'echappe?

6 réponses

Avatar
Remi Thomas
giova wrote:
salut a tous.

Je suis en train de découvrir la dll gdiplus, je tiens a preciser que
je suis débutant.

quelquechose me surprend :

la methode FromFile de la classe Image. Je penssais qu'a l'inverse du
constructeur Bitmap cette methode remplacait l'image native contenue
dans l'objet bitmap par une nouvelle image native.
Or je me rends compte qu'en fait cette methode crée un nouvel objet
Bitmap.

resultat a mes yeux cette methode a les memes concesquences que si
l'on appellait tout simplement un nouveau constructeur Bitmap.
Bitmap( const WCHAR *filename, BOOL useIcm);

(The FromFile method creates a Bitmap object based on an image file.)

d'ou ma question : quel est l'interret de cette methode? ou il y a
t'il quelque chose qui m'echappe?



Si tu regardes bien tu verra que c'est une méthode statique.
Elle ne peut donc pas accéder aux variables de la l'instance vu qu'elle n'a
pas d'instance.
Il suffit de faire un delete avant d'écraser la variable Image.

Rémi

--
Rémi Thomas - MVP Visual Studio .NET
Développeur Windows indépendant
http://www.xtware.com/cv
Avatar
giova
Remi Thomas wrote:
giova wrote:

salut a tous.

Je suis en train de découvrir la dll gdiplus, je tiens a preciser que
je suis débutant.

quelquechose me surprend :

la methode FromFile de la classe Image. Je penssais qu'a l'inverse du
constructeur Bitmap cette methode remplacait l'image native contenue
dans l'objet bitmap par une nouvelle image native.
Or je me rends compte qu'en fait cette methode crée un nouvel objet
Bitmap.

resultat a mes yeux cette methode a les memes concesquences que si
l'on appellait tout simplement un nouveau constructeur Bitmap.
Bitmap( const WCHAR *filename, BOOL useIcm);

(The FromFile method creates a Bitmap object based on an image file.)

d'ou ma question : quel est l'interret de cette methode? ou il y a
t'il quelque chose qui m'echappe?




Si tu regardes bien tu verra que c'est une méthode statique.
Elle ne peut donc pas accéder aux variables de la l'instance vu qu'elle n'a
pas d'instance.
Il suffit de faire un delete avant d'écraser la variable Image.

Rémi



arg j'avais pas vu qu'elle etait statique, donc comme je le penssais
elle n'offre rien de plus que ce que fait le constructeur non?
ou peut etre il y a t'il une notion que je ne connais pas et qui fait la
difference entre les deux.
Avatar
adebaene
giova wrote in message news:<409f476c$0$21081$...
>
> Si tu regardes bien tu verra que c'est une méthode statique.
> Elle ne peut donc pas accéder aux variables de la l'instance vu qu'elle n'a
> pas d'instance.
> Il suffit de faire un delete avant d'écraser la variable Image.
>
> Rémi
>
arg j'avais pas vu qu'elle etait statique, donc comme je le penssais
elle n'offre rien de plus que ce que fait le constructeur non?



L'une renvoie un objet "Bitmap", l'autre un objet "Image", c'est déjà
une différence non?

Bitmap hérite de Image, mais MetaFile hérite également de Image. Je ne
sais pas trop ce qui se passe si tu files une fichier MetaFile à
Image::FromFile, ce serait à tester (logiquement, il devrait créer un
objet de type "Metafile").

Malheureusement, la doc de GDI+ est encore *très* incomplète et
superficielle (un peu comme celle d'ATL).

Arnaud
MVP - VC
Avatar
giova
Arnaud Debaene wrote:
giova wrote in message news:<409f476c$0$21081$...

Si tu regardes bien tu verra que c'est une méthode statique.
Elle ne peut donc pas accéder aux variables de la l'instance vu qu'elle n'a
pas d'instance.
Il suffit de faire un delete avant d'écraser la variable Image.

Rémi




arg j'avais pas vu qu'elle etait statique, donc comme je le penssais
elle n'offre rien de plus que ce que fait le constructeur non?




L'une renvoie un objet "Bitmap", l'autre un objet "Image", c'est déjà
une différence non?

Bitmap hérite de Image, mais MetaFile hérite également de Image. Je ne
sais pas trop ce qui se passe si tu files une fichier MetaFile à
Image::FromFile, ce serait à tester (logiquement, il devrait créer un
objet de type "Metafile").

Malheureusement, la doc de GDI+ est encore *très* incomplète et
superficielle (un peu comme celle d'ATL).

Arnaud
MVP - VC


euh je crois que tu confond, ou on s'est mal compris ou quelquechose
m'echappe.

Rappel :The FromFile method creates a Bitmap object based on an image
file. c'est une methode de Bitmap (peut etre heritée de Image mais qui
retourne un pointeur sur Bitmap en tout cas)

et je parle du constructeur Bitmap( const WCHAR *filename, BOOL useIcm);

donc dans les deux cas je parle de Bitmap.
Avatar
Arnaud Debaene
giova wrote:

euh je crois que tu confond, ou on s'est mal compris ou quelquechose
m'echappe.

Rappel :The FromFile method creates a Bitmap object based on an image
file. c'est une methode de Bitmap (peut etre heritée de Image mais qui
retourne un pointeur sur Bitmap en tout cas)



Non je ne confonds pas : je quote ton premier message :
quelquechose me surprend :
la methode FromFile de la classe Image. Je penssais qu'a l'inverse <snip>



Et c'est bien une méthode de la classe Image. C'est vrai qu'il y a également
une méthod Bitmap::FromFile, qui présente pour le coup un intérêt
fonctionnel limité par rapport au constructeur de Bitmap. De la même façon,
Image::FromFile présente peu d'intérêt par rapport au constructeur de Image.

Tu peux regarder les implémentations GdiPlusBitmap.h (l.65 pou
Image::FromFile et l.674 pour Bitmap::FromFile) : ce sont de simples stubs
vers les constructeurs.

Par contre, si ces méthodes n'apportent rien en tant que telles, elles sont
plus naturelles à utiliser dans le cadre d'un pattern "object factory" ou
quelque chose d'approchant : c'est donc surtout une question de design et de
style, pas une question de fonctionnalités supoplémentaires.

Arnaud
Avatar
giova
Arnaud Debaene wrote:
giova wrote:


euh je crois que tu confond, ou on s'est mal compris ou quelquechose
m'echappe.

Rappel :The FromFile method creates a Bitmap object based on an image
file. c'est une methode de Bitmap (peut etre heritée de Image mais qui
retourne un pointeur sur Bitmap en tout cas)




Non je ne confonds pas : je quote ton premier message :

quelquechose me surprend :
la methode FromFile de la classe Image. Je penssais qu'a l'inverse <snip>




Et c'est bien une méthode de la classe Image. C'est vrai qu'il y a également
une méthod Bitmap::FromFile, qui présente pour le coup un intérêt
fonctionnel limité par rapport au constructeur de Bitmap. De la même façon,
Image::FromFile présente peu d'intérêt par rapport au constructeur de Image.

Tu peux regarder les implémentations GdiPlusBitmap.h (l.65 pou
Image::FromFile et l.674 pour Bitmap::FromFile) : ce sont de simples stubs
vers les constructeurs.

Par contre, si ces méthodes n'apportent rien en tant que telles, elles sont
plus naturelles à utiliser dans le cadre d'un pattern "object factory" ou
quelque chose d'approchant : c'est donc surtout une question de design et de
style, pas une question de fonctionnalités supoplémentaires.

Arnaud




merci pour tous ces details.

Dans la crainte qu'ils modifie le fonctionnement de fromfile dans les
future versions, j'ai décidé de m'en passer et de passer par le
constructeur.

merci encore.