Bonjour,

il me semblait l'avoir lu quelque part, je me suis dit que ça avait peut-être un rapport avec cette histoire de fichier 32bitsKC qui, mine de rien, fait 250 de large et donc pas divisible par 8.
Le truc que je ne m'explique pas, c'est que ce fichier 32bitsKC ce n'est pas moi qui le génère, ni mon code, je me contente juste de demander gentiment à Lazarus de l'ouvrir. Bah, l'explication est tout en bas, lire le PS.

Concernant le test rapide ci-dessous, le bouton "Enregistrer..." crée deux fichiers à chaque fois, l'un issu du bitmap de travail et l'autre du TImage d'affichage, les deux sont parfaits et examinés à l'éditeur hexa montrent un PixelFormat à 32.
Nom : fichiers_générés.png
Affichages : 150
Taille : 29,3 Ko
Image réduite de moitié

Il n'y a rien de plus à dire, juste regarder le gif (qui m'a pourri le joli dégradé gris, )
Nom : 247-257.gif
Affichages : 174
Taille : 275,0 Ko

Quand je pense au temps que j'ai passé, depuis des années, à chercher des bugs dans mes codes alors qu'il n'y en avait pas...
Cœur du code :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
procedure TForm1.ComputeBitmap;
var
  h, w: integer;
  gray: integer;// ne pas utiliser byte
  ratio:single;
  {$IFDEF WINDOWS}
  row:  pRGBTriple;
  {$ELSE}
  row:  pRGBQuad;
  {$ENDIF}
begin
  ratio:= 255 / (WSIZE + HSIZE);
 
  bmp.BeginUpdate();
  for h := 0 to HSIZE-1 do
  begin
    {$IFDEF WINDOWS}
    row := pRGBTriple(bmp.RawImage.GetLineStart(h));
    {$ELSE} // devrait s'appeler pRGBAQuad...
    row := pRGBQuad(bmp.RawImage.GetLineStart(h));
    {$ENDIF}
 
    for w := 0 to WSIZE-1 do begin
      gray := round((h+w) * ratio);   // calcul du gris
      if gray > 255 then gray := 255;
      {$IFDEF WINDOWS}
      {if bmp.PixelFormat = pf32bit
      then row[w] := RGBtoRGBTriple(gray, gray, gray)
      else }
      row[w] := RGBtoRGBTriple(gray, gray, gray)
      {$ELSE}
      if bmp.PixelFormat = pf32bit
      then row[w] := RGBAtoQuadBGRA(gray, gray, gray, 255)
      else row[w] := RGBAtoQuadRGBA(gray, gray, gray, 255)
      {$ENDIF}
    end;
  end;
  bmp.EndUpdate();
 
  img.Picture.Graphic := bmp;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  HSIZE := 200;
  WSIZE := StrToInt(rdgLargeur.Items[rdgLargeur.ItemIndex]);
  bmp := TBitmap.Create;
  rdgPFClick(nil);
end;
 
procedure TForm1.rdgPFClick(Sender: TObject);
begin
  with bmp do begin
    case rdgPF.ItemIndex of
      0: PixelFormat := pf24bit;
      1: PixelFormat := pf32bit;
    end;
    Height := HSIZE;
    Width  := WSIZE;
  end;
end;
 
procedure TForm1.rdgLargeurClick(Sender: TObject);
begin
  WSIZE := StrToInt(rdgLargeur.Items[rdgLargeur.ItemIndex]);
  bmp.Width := WSIZE;
  img.Width := WSIZE;
  ComputeBitmap;
end;
PS : je retrouve un peu le même défaut en utilisant un programme écrit en Delphi5 (source, adaptée juste ce qu'il faut) qui ne peut correctement afficher que les fichiers dont la largeur est divisible par 8.
Le même problème de rayures verticales est également visible avec la fenêtre de preview de l'OpenPictureDialog.

Et comme je n'ai jamais mis mes mains dans le code de l'opd, le bug n'est donc bien pas de mon fait.

Ce qui est curieux, c'est que 37 n'est pas divisible par 8 mais sa preview est correcte,
pas plus que 3 dont la preview est aussi correcte
ou 397x299, preview correcte
mais 397x1 preview vide !

Bon, je vais préparer un zip... deux dossiers et quelques fichiers : 2projets4div8.zip