Bonjour à tous.

On reste dans les bitmaps pour changer Aprè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)

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;
Voila le showMessage et on voit bien que les infos sont correctes.

Nom : 2017-05-02_155411.jpg
Affichages : 195
Taille : 11,1 Ko

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