Question

Actuellement, je boucle le Canvas.Pixels[] propriété et lisez chaque pixel sur une toile pour échanger des octets rouges / bleus (pour des raisons spécifiques). Cependant, cela prend en moyenne 2 secondes par image, et j'ai plus de 8 000 photos que je dois convertir (du jour au lendemain). Je comprends que je peux utiliser une méthode de ScanLine Pour accomplir cela beaucoup plus rapide, mais je ne sais rien ScanLine - C'est un niveau de codage beaucoup plus faible que je ne suis à l'aise. Quel est le moyen le plus rapide pour y parvenir? Je suis prêt à attendre un peu de temps pour que cela passe, mais ce serait toujours bien si je pouvais hacher ce temps en deux ou plus.

En ce moment, c'est la procédure que j'utilise:

procedure SwapBytes(var Bmp: TBitmap);
var
  X, Y: Integer;
  R, G, B: Byte;
  C: TColor;
begin
  for Y := 0 to Bmp.Height - 1 do begin
    for X := 0 to Bmp.Width - 1 do begin
      C:= Bmp.Canvas.Pixels[X,Y];
      R:= GetRValue(C);
      G:= GetGValue(C);
      B:= GetBValue(C);
      Bmp.Canvas.Pixels[X,Y]:= RGB(B, G, R)
    end;
  end;
end;

Note supplémentaire: Une conversion initiale de plus de 8 000 images est la première étape de la raison pour laquelle j'ai besoin de cela. Cependant, j'utiliserai également la même chose dans notre logiciel pour convertir automatiquement n'importe quelle image sur place, au besoin. Ainsi, un convertisseur tiers ne fonctionnera pas, car je ne peux pas distribuer cela à nos clients.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top