|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Замена каналов изображения
Доброго времени суток!
У меня возник вопрос, как можно в битмапе (или в изображении загруженном в Image) менять местами каналы RGB? Т.е., допустим в Image грузится картинка в BMP со стандартным расположением каналов RGB. Мне нужно реализовать возможность (пусть будет по нажатию на кнопку) смены RGB в следующих вариантах: BGR, RBG, GRB, BRG, GBR. Соответственно изображение в Image будет меняться. Заранее спасибо! |
#2
|
|||
|
|||
scanLine, далее меняешь значения триплетов как тебе надо.
Примеров на scanLine в инете полно. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
LIONSMILE (28.05.2019)
|
#3
|
||||
|
||||
Нашёл простенькую процедуру, она собственно удовлетворяет тому, что я хотел видеть.
Код:
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); // Изменяя в скобках порядок B, G, R, изменяется смена каналов в битмапе Bmp.Canvas.Pixels[X,Y]:= RGB(B, G, R) end; end; end; |
#4
|
|||
|
|||
Ага, вот только на средних и больших битмапах она будет о-о-очень медленно работать. Не зря ScanLine сделан...
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Admin (29.05.2019)
|