Resolution d'image et optimisation de l'execution

jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006 - 8 nov. 2005 à 00:46
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006 - 14 nov. 2005 à 21:18
Bonjour a toutes et tous !



Mon objectif est le suivant: réaliser une application toute simple sous
VB6 qui permette d'inserer des photos haute resolution sur un dessin,
au format A4, sans n'avoir que la moitie de ma page a l'ecran!



Ce que j'ai fais: j'ai une form principale contenant une picture box
qui represente une sorte d'apercu de feuille A4, sur laquelle
j'incruste des apercus de photos. Je parle "d'apercus" car je travaille
en parallele sur une form invisible, aux dimensions importantes (genre
20000x30000 twips), afin d'y placer le dessin original (format A4) et
les photos en haute definition. Et je realise des "paintpicture" entre
ma forme visible, aux dimensions reduites, qui me sert juste d'apercu,
et ma forme invisible sur laquelle je travaille avec les donnees
originales.



J'aimerais que vous me critiquiez afin de savoir s'il existe une
maniere plus elegante de gerer cette problematique et d'alleger
l'execution de l'application, qui est pour l'instant assez volumineuse.



Merci d'avance.

13 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
8 nov. 2005 à 06:09
déjà au lieu d'utiliser une feuille temporaire, stocke ton image dans
un stdpicture, ca t'évitera de gaspiller des ressources graphiques (DC)
pour rien.



Ensuite, au lieu d'utiliser PaintPicture, utiliser la fonction API BitBlt qui est un peu plus rapide.



Si tu fait du traitement de pixels (modification de couleurs des
pixels), va voir ma source DKS_Gestion_Image qui te permettra de gagner
environ 30x de rapidité de plus que les fonctions standard de VB, ce
qui est loin d'être négligeable !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
8 nov. 2005 à 09:43
merci beaucoup pour ton aide !



je ne connaissais pas "stdpicture" mais ca semle convenir parfaitement
a ce que je recherche! mais pourrais tu m'en dire davantage ? car je
n'ai trouvé que sa declaration:

Dim X As New StdPicture

mais je ne sais pas comment on doit définir ses dimensions (s'il le faut!) et existe-t-il les meme methodes que sur une picturebox classique?

merci d'avance.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
8 nov. 2005 à 10:45
Non, un stdPicture n'est qu'un objet permettant de stocker les images
(c'est le même type que la propriété Picture du PictureBox), ca évite
surtout de passer par un picturebox temporaire qui bouffe plus de
ressource qu'un stdpicture, cependant, le stdpicture ne permet que de
stocker l'image, et non de la manipuler.



Pour charger une image dans un stdPicture :

Dim X As New StdPicture
Set X = LoadPicture("nom du fichier image")

'OU :
Set X = Picture1.Picture




_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
8 nov. 2005 à 13:17
ah d'accord, merci pour l'explication !

En gros, pour mon application, puisque je n'affiche jamais ma form de
grandes dimensions, je peux remplacer par exemple mes
"grande_form.picture1.picture" par "grande_form.picture.stdpicture" ,
c'est ca ou bien j'ai rien compris?

merci encore de ton aide!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
8 nov. 2005 à 13:48
Ah non, ce serait plutôt remplacer grande_form.picture1.picture par ta variable X, avec X :

Dim X As New StdPicture
Set X = LoadPicture("nom du fichier image")




_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
8 nov. 2005 à 15:47
La "stdPicture", c'est surtout bien lorsque l'on souhaite travailler avec des images, pour les stocker en attendant, non?

Ce que je fais, c'est simplement des incrustations à la suite de photos dans une grande picturebox.

Donc j'ai une petite picturebox dans laquelle je charge a la suite mes
photos (et que je peux donc remplacer par une StdPicture) et

j'ai également une grande picturebox dans laquelle je charge un dessin
au depart, mais que je ne pourrais pas remplacer cette fois

par une StdPicture puisque une fois que j'ai charge mon dessin, au
debut, je viens incruster par plusieurs paintpicture a la suite, mes

photos qui sont dans ma petite picturebox (que je vais remplacer en StdPicture).



En fait, comment ferais tu une incrustation d'une image dans une autre, a l'aide de StdPicture ?

Je ne peux me servir que d'une StdPicture dans mon cas, non?

merci.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 nov. 2005 à 09:55
Dans ton cas, le plus simple c'est de charger les images une à une dans
un stdpicture, et d'utiliser ces stdpicture pour faire tes paintpicture
sur ton image finale, par exemple :



Dim LoadingImage as stdPicture



Set LoadingImage = LoadPicture("c:\image1.bmp")

Call Picture1.PaintPicture(LoadingImage, 0, 0, 100, 100)

Set LoadingImage = LoadPicture("c:\image2.bmp")


Call Picture1.PaintPicture(LoadingImage, 100, 100, 100, 100)

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
9 nov. 2005 à 13:10
merci beaucoup Dark Sidious, mais sachant que j'insere des photos
(4800*3600 twips) dans une picture (30000*20000 twips), il semble
helas necessaire que je garde ma picturebox de 30000*20000 et que je
fasse une stdPicture que pour charger mes petites photos (4800*3600)

Je pense que pour vraiment optimiser, il faudrait que je trouve un
moyen de ne pas faire une si grande picture box, que je n'affiche meme
pas en plus, mais je m'en sers juste pour incruster mes photos a partir
de paintpicture.
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
10 nov. 2005 à 18:29
pas d'avis ???
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 nov. 2005 à 18:43
Si si,



Il existe toujours des moyens d'optimiser, mais la solution ici passe
par des méthodes relativement compliqué, et je ne suis pas sûr que tu y
gagnerais beaucoup a final : créer un DC (createDC) temporaire dans
lequel tu y collerais tes images (BitBlt), sans oublier de détruire le
DC dès que tu n'en a plus besoin (DeleteDC), mais franchement, une
picturebox c'est quand même bien plus simple qu'un DC temporaire, et
remplit le même rôle !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
14 nov. 2005 à 00:22
ok, merci bien DKS mais cela est vraiment plus rapide d'utiliser un DC plutot qu'une picturebox invisible?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 nov. 2005 à 06:46
Ben comme je te l'ai dit : "je ne suis pas sûr que tu y gagnerais beaucoup a final".



Mais pour ce que tu veux faire (chargement d'images uniquement), VB est
autant optimisé que les API : il faut charger toute l'image !


_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
jekifvb6 Messages postés 156 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 18 septembre 2006
14 nov. 2005 à 21:18
merci pour toutes ces reponses! dommage que je n'ai pu trouver de solution miracle!
0
Rejoignez-nous