Linux est le parent pauvre de Lazarus, c'est confirmé
Salut,
Citation:
Envoyé par
anapurna
pour un BytePerPixel <> 4
Tu tombes bien avec ton truc, je suis dessus depuis ce matin et, encore une fois, Linux est le parent pauvre de Lazarus.
Je l'avais déjà dit, je le maintiens, et démonstration :
j'utilise 2 MemoryStream, un TMemory qui contient les données source (un fichier de 8x2x24) et un TBytes comme témoin, et p et q sont des pBytes.
La partie utile c'est ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| //2 recopier les bytes
bmp.RawImage.Description.Init_BPP24_B8G8R8_BIO_TTB(aWidth,aHeight);
bmp.BeginUpdate();
for h := aHeight-1 downto 0 do begin
q := bmp.RawImage.GetLineStart(h);
for w := 0 to LineSize-1 do begin
p^ := ms.ReadByte; // récup byte
bs.WriteByte(p^); // copie pour témoin, bytes ok
q^ := p^; inc(q); // pour GetLineStart -- L: fausses couleurs, W: ok
{ dessus ou dessous au choix, mais pas exactement les mêmes fausses couleurs sous Linux }
//bmp.RawImage.Data[(LineSize*h)+w] := p^; // L: fausses couleurs, W: ok
end;
end;
bmp.EndUpdate();
//3 vérif
bs.Position:=0;
//bmp.LoadFromStream(bs, bs.Size); // témoin, ok |
J'ai fait ce genre d'essai car je voulais passer par GetLineStart, le ScanLine de Lazarus.
Je vous laisse lire les commentaires dans le code, je précise juste que si je commente les 2 lignes avant le bmp.EndUpdate et active le chargement du bmp à partir du bs pour vérifier que les données qu'il contient sont bonnes, la réponse est oui, elles sont bonnes.
Et quand j'écris fausses couleurs, c'est toujours ces histoires de décalages : le 1er pixel de chaque ligne est bon avec q^ := p^; mais juste le 1er de tous avec Data...
Je vais chercher de ce côté-là.
Ah, la ligne n° 2 (Description.Init_...) semble ne servir à rien.