cs_robertog
Messages postés7Date d'inscriptionlundi 3 octobre 2005StatutMembreDernière intervention20 février 2012
-
11 nov. 2008 à 12:32
cs_robertog
Messages postés7Date d'inscriptionlundi 3 octobre 2005StatutMembreDernière intervention20 février 2012
-
13 nov. 2008 à 12:37
Bonjour a tous ,
Je souhaiterai créer un fichier BMP de taille precise (par exemple 3000 x 5000 pixels) par programme.
Les exemples de code que j'ai trouvés pour enregistrer un bitmap en fichier BMP partent tous d'un fichier original de taille fixée mais je veux pouvoir donner precisement la hauteur et la largeur en pixel .
Peu importe ce qu'il y a dans le fichier du moment qu'il est en 24 bits, c'est la taille qui importe .
Le probleme semble etre la construction du "header" mais on parle aussi de DIBsection et de DIBbitmap.
Je m'y perd un peu ... (en fait, je nage completement !)
dede59620
Messages postés23Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention31 juillet 2017 11 nov. 2008 à 18:21
Bonsoir
j'allais poster un bout de code pour le faire mais après vérification, en VB6 du moins, je ne parviens pas à dépasser 11 655 000 pixels.
Avec une autre limite : 16383 de large ou de haut.
Par contre un truc comme 3000 * 3885 ça marche ainsi que 711 * 16383.
Du moment que le produit est respecté.
Sinon, je présume que tu as essayé de redimensionner ta picturebox avec l'ordre
Picture1.Width = 3000
Picture1.Height = 3000
cs_robertog
Messages postés7Date d'inscriptionlundi 3 octobre 2005StatutMembreDernière intervention20 février 2012 12 nov. 2008 à 09:01
Sinon, je présume que tu as essayé de redimensionner ta picturebox avec l'ordre
Picture1.Width = 3000
Picture1.Height = 3000
Oui, cela ne marche pas .
Lors du SavePicture pour créer le fichier, les dimensions restent celles de l'image chargée avec LoadPicture.
Si on utilise pas de LoadPicture mais que l'on donne juste des dimensions, il est impossible de sauvegarder une image avec SavePicture.
Je suppose que le bitmap associé avec à la PictureBox determine tout ça :
- Si pas de LoadPicture, pas de bitmap associé, donc pas de sauvergarde possible
- Si un LoadPicture a été effectué, on ne peut pas changer directement les dimensions du bitmap, donc les dimensions sont figées.
Le temps d'execution n'est pas critique, je ne suis pas specialement pressé ...
Evidemment, le code en VB.net semble vraiment très pratique mais je n'ai pas VB.net ... (d'ailleurs, comment fait-on pour avoir VB.net ? Y-a-t-il des versions d'essai gratuites ?)
Bref, il semble qu'en VB6.0 , le seul moyen est d'utiliser les API et les codes de construction de fichier BMP (avec header et tutti quanti). Mais mon niveau est trop faible pour manipuler ces API correctement ...
Que faire ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
dede59620
Messages postés23Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention31 juillet 2017 12 nov. 2008 à 11:14
Bonjour Robertog
ça fonctionne, même sans contenu chargé dans la picturebox.
je pense que tu n'as pas pris la précaution de faire ça:
Picture1.Picture = Picture1.Image
la ligne est obligatoire sinon effectivement ça ne marche pas.
Voilà un exemple complet que j'utilise depuis belle lurette:
Private Sub SauverGraphe_Click()
CommonDialog1.DialogTitle = "Sauver un Graphe"
CommonDialog1.FileName = App.Path + "\test.bmp"
CommonDialog1.ShowSave
If CommonDialog1.FileName <> "" Then
'MsgBox "L'image a été sauvegardée dans " & CommonDialog1.FileName
Picture1.Picture = LoadPicture()
Picture1.Picture = LoadPicture(CommonDialog1.FileName)
End If
End Sub
Tu peux remarquer que même sans renseigner Picture1 tu peux sauvegarder.
Je viens de faire l'essai, ça roule.
cs_robertog
Messages postés7Date d'inscriptionlundi 3 octobre 2005StatutMembreDernière intervention20 février 2012 12 nov. 2008 à 12:11
Merci Dédé !
Je viens d'essayer, ça marche !!
La taille est limité parce qu'elle est defini en Twips et non en pixels.
J'ai trouvé une solution:
Dim TailleEnPixelX, TailleEnPixelY As Long
TailleEnPixelX = 3000
TailleEnPixelY = 3000
Picture1.Width = Screen.TwipsPerPixelX * TailleEnPixelX
Picture1.Height = Screen.TwipsPerPixelY * TailleEnPixelY
Le fichier presque ok, sa taille est de 2996 x 2996 pixels, il doit y avoir une explication ?
J'ai essayé avec:
Picture1.ScaleMode = vbPixels '3
Picture1.ScaleWidth = 3000
Picture1.ScaleHeight = 3000
mais ça ne marche pas .. le fichier fait 261 x 45 pixels ...
Quelle est l'explication ?
dede59620
Messages postés23Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention31 juillet 2017 12 nov. 2008 à 12:56
l'explication est simple, tu as mis une bordure à ta picturebox. (bordureStyle = 0 et Appearance = 0)
Tu l'enleves elle fera bien 3000*3000
le ScaleMode doit en effet être en mode 3-pixel.
et c'est .Width pas .ScaleWidth