![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||