Bonjour à tous.
On reste dans les bitmaps pour changerAprès le format XPM c'est à mon tour, de passer le format BMP à la moulinette.
Un petit test tout bête (ma fonction pour vérifier le bouzin)
Voila le showMessage et on voit bien que les infos sont correctes.
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
23
24
25
26
27
28
29
30
31
32
33
34
35 Const BMP_MAGIC_WINBMP = $424D; //19778; //// ---> Là Paf les octets sont inversé si on défini en Hexa Pourquoi (cf test " if (bfType= BMP_MAGIC_WINBMP) " plus bas) ???? function TGLZBitmapBMPImage.CheckFormat(): Boolean; Var S:String; begin Result := False; Memory.Read(FBmpFileHeader,SizeOf(TGLZBMPFileHeader)); FHeaderSize:=Memory.ReadInteger; S:=''; S:='Taille Header : '+InttoStr(SizeOf(TGLZBMPFileHeader))+#13+#10; S:=S+'MagicID : '+char(lo(FBmpFileHeader.bfType))+char(hi(FBmpFileHeader.bfType))+#13+#10; S:=S+'Taille : '+inttostr(FBmpFileHeader.bfSize)+#13+#10; S:=S+'Position données : '+inttostr(FBmpFileHeader.bfOffBits)+#13+#10; S:=S+'Taille 2eme Header : '+inttostr(FHeaderSize)+#13+#10; ShowMessage('CheckFormat'+#13+#10+S); With FBmpFileHeader do begin if (bfType= BMP_MAGIC_WINBMP) or // C'est la le truc bizarre (bfType = BMP_MAGIC_OS2BMP) or (bfType = BMP_MAGIC_OS21ICO) or (bfType = BMP_MAGIC_OS21CUR) or (bfType = BMP_MAGIC_OS22ICO) or (bfType = BMP_MAGIC_OS22CUR) then begin ShowMessage('BMP VALIDE'); Result:= ReadImageProperties; // On Lit les propriétes de l'image end else ShowMessage('BMP INVALIDE'); end; end;
Est ce que quelqu'un pourrais m'expliquer ce "swappage de byte" lors du test avec IF ?. Aurais-je une option de compilations cachée ou bien ?
Par compte si je définie BMP_MAGIC_WINBMP en décimale (19778) pas de soucis ça fonctionne
Si vous avez des idées, parce que je suis à sec. Et faut que je trouve avant de pouvoir avancer plus loin.
Merci
Partager