В настоящее время я зацикливаю свойство Canvas.Pixels[]
и считываю каждый пиксель на холсте, чтобы поменять местами красные / синие байты (по определенным причинам).Тем не менее, это занимает в среднем 2 секунды на изображение, и у меня есть более 8000 изображений, которые нужно преобразовать (за ночь).Я понимаю, что могу использовать метод ScanLine
, чтобы выполнить это намного быстрее, но я ничего не знаю о ScanLine
- это гораздо более низкий уровень кодирования, чем мне удобно.Какой самый быстрый способ сделать это?Я готов подождать некоторое время, пока это пройдет, но было бы неплохо, если бы я мог нарезать это время пополам или больше.
Прямо сейчас, я использую эту процедуру:
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;
Добавлено примечание : Первоначальное преобразование более 8000 изображений является первым шагом, почему мне это нужно,Однако я также буду использовать то же самое в нашем программном обеспечении для автоматического преобразования любого изображения на месте по мере необходимости.Поэтому сторонний конвертер не будет работать, потому что я не могу распространять его среди наших клиентов.