esaye tuot simplement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void CInterface3Dlg::OnButton3() { WriteWindowToDIB("test.bmp", this); MessageBox("fini"); }
esaye tuot simplement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void CInterface3Dlg::OnButton3() { WriteWindowToDIB("test.bmp", this); MessageBox("fini"); }
oui ... j'avais pas pensé à enlever ce qu'il y avait en tro....Envoyé par matazz
donc j'ai reessayé comme tu dis, et c'est pareil, si je double-clic sur l'icone du fichier créé, il met "le dessin a échoué", par contre je viens de remarquer que si je l'ouvre avec paint, il y a bien un rectangle de la taille de la CDialog mais il est tout blanc, alors que j'avais dessiné dans la fenêtre...
c'est parceque tu est en debug, build la release et execute la...
eh non.. c'est toujours pareil... meme avec la release
ben écoute je t'avoue que je sais pas trop....
t'est sous quelle OS ?
Bonjour,
je n'ai toujours pas résolu mon problème, mais en comparant l'image que je crée avec une image créée avec Paint, à l'aide d'un éditeur héxadécimal, je me suis rendue compte que le 13ème octet de mon image valait 4 alors que dans l'autre image il vaut 0. En mettant 0 également dans mon image, j'arrive à l'afficher.
Il doit donc y avoir un problème au moment où on écrit l'entete...
Est ce que vous auriez une idée?
merci
quelle est ta configuration d'écran (surtout profondeur couleur 16 bits, 32bits...) ?
alors, pour la qualité couleur, j'ai 24bits, ca peut venir de ca?
j'ai recommencé, l'essai avec 16bits pour les couleurs de l'écran, et j'ai toujours un 04 qui traine, mais c'est sur le 12eme octet ce coup ci. comme tout a l'heure en le changeant par 0 ca donne une image qui s'affiche.
Effectivement j'ai trouvé ça :
Car il semble que certains outils windows arrivent pas à le lire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //This is the tricky part of the code. It will open the BMP file //again, but in Binary Mode. Then, it will read the first 14 //bytes from the bitmap file. //It will change the 11th byte from 11 to 36. //It will change the 14th byte from 4 to 0 because this is the //basic requirement for the bitmap format. //So, it will support all PaintBrush Tools and thumbnail views //of Windows Explorer. CFile m_tempFile; //CBinFile is derived from CFile BYTE dummy=0;//14 //14 BYTE pBuf[14]; //11 BOOL fres=m_tempFile.Open(fname,CFile::modeReadWrite | CFile::typeBinary); UINT tt=m_tempFile.Read(pBuf,14); pBuf[13]=dummy;//will replace from 04 to 00 m_tempFile.SeekToBegin(); m_tempFile.Write(pBuf,14); m_tempFile.Close();
Tu as essayé avec Photoshop ?
je n'ai pas photoshop
je vais essayé de recommencer avec ce que tu m'as donné
ah merci beaucoup!!!! ca marche enfin!!!
mais je n'ai pas très bien compris le problème en fait... et selon la configuration de l'écran il faudra changer le numero de l'octet à modifier?
merci encore!!!!!!
Apparement le problème vient de la méthode d'écriture de la Bitmap qui n'est pas compatible avec MSPaint, l'explorer windows...
Pour ce qui est de la résolution, disons que la méthode crée une bitmap par copie du DC de la fenetre.
Donc si tu est en 16 Bits l'encodage du DC et donc de la bitmap enregistrée sera en 16 bits, et donc l'en-tête bitmap sera plus petit ce qui fait que l'octet problématique ne sera pas au même endroit...
C'est vrai que c'est un peu bancale comme méthode...
Tout dépend l'utiliastion que tu en as, si c'est pour un outil que tu vas distribué, il vaut mieux prévoir toutes les configurations possible (16,24,32 bits au minimum)...
merci beaucoup!!!
la méthode devrait suffir pour l'instant
Partager