Mayage rapide d'échanger des octets rouges / bleus en utilisant la ligne de balayage
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