Если начнешь работать с ScanLine, то там работа идет с форматом RGB. И еще, Очень уж много "IF" в цикле, работу это тоже не очень ускоряет (хоть и не очень замедляет). Лучше уж использовать в массиве вместо значений 1,2,3... уже готовые цвета - 255, 32768, 16711680.
Пример использования ScanLine:
Код:
type
TRGBArray = array[0..32767] of TRGBTriple;
PRGBArray = ^TRGBArray;
var
X, Y : Integer;
Rows : PRGBArray;
Begin
for y := 0 to Bitmap.Height - 1 do
begin
rows := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
begin
//здесь идут все проверки и задается цвет соотв. пикселя - в
// системе RGB
rows[x].rgbtRed := 255;
rows[x].rgbtGreen := 128;
rows[x].rgbtBlue := 0;
end;
end;
end;
Пользуйся функциями GetRValue(), GetBValue(), GetGValue(), RGB(,,).