Creation d'un fichier BMP de taille precise

cs_robertog Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 20 février 2012 - 11 nov. 2008 à 12:32
cs_robertog Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 20 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 !)

Merci de votre aide.

9 réponses

dede59620 Messages postés 23 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 31 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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 nov. 2008 à 19:09
salut,

au dessus de 3000*2000 çà devient difficile

rends-toi compte, 3000*5000 çà donne au minimum une image de 42Mo
je doute que VB puisse facilement gérer çà en une seule fois

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
11 nov. 2008 à 19:26
Bonjour,

je ne sais pas si c'est possible d'utiliser une dll .net en vb6

mais en vb8 c'est simple à faire :

Dim bmp
As
New Bitmap(3000, 5000)bmp.MakeTransparent()

bmp.Save(

"c:\image.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
ça dure +-1 seconde
a+
0
cs_robertog Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 20 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 ?
 
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 nov. 2008 à 09:14
savepicture accepte un ".image", donc rapport à la taille et non le contenu, mais il n'acceptera pas une tellle dimension
(err 480 je crois)

il faut passer par la création BMP plus poussée

vb.net :

Q : [../doc/faq.aspx#vb_lastide Où trouver la dernière version gratuite de l'IDE (Integrated Development Environment) pour développer en Visual Basic]


<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
dede59620 Messages postés 23 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 31 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

Picture1.Width = 3000
Picture1.Height = 3000

Picture1.Picture = Picture1.Image
SavePicture Picture1.Picture, CommonDialog1.FileName



'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.

Mais, c'est limité en taille.
0
cs_robertog Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 20 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 ?

Encore merci Dédé .
0
dede59620 Messages postés 23 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 31 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

Picture1.Appearance = 0
Picture1.BorderStyle = 0
Picture1.AutoSize = False
Picture1.ScaleMode = 3
Picture1.Width = 3000
Picture1.Height = 3000

chez moi ça marche.
0
cs_robertog Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 20 février 2012
13 nov. 2008 à 12:37
Chez moi aussi !


Merci pour tout, sans ton aide, je crois que j'y serais encore ...




 
0
Rejoignez-nous