![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование с изменённой палитрой. [D7]
AlexanderMS © (2007-07-16 05:06:00)Допустим, есть изображение (HBITMAP). Как его вывести так, чтобы в выведенном изображении был заменен, к примеру, красный цвет на синий, а белый - на чёрный?
AlexanderMS (2007-07-16 18:53:00) [1]
> Тем лучше! Палитра задаётся для DC, а не для битмапа! Получаешь
> ты этот DC (тогда ессно у контрола а не у битмапа) и выводишь
> на него свои картинки.
Прошу прощения, не так выразился. Я имел ввиду следующее: к примеру, поменять красный цвет на синий на одном рисунке, зелёный на жёлтый - на другом, и всё это вывести на DC...
Просто я прочитал про механизм вывода изображений у игровых приставок: там каждому изображению настраивают палитру и выводят с этой палирой, создавая, к примеру, эффект переливания картинки цветами, блеска цвета, да и просто выводят несколько одинаковых по виду (за исключением цвета) объектов (типа машин в гоночках: все Ferrari, но одна - красная, другая - синяя и т. п.)
Dib@zol (2007-07-16 16:49:00) [2]
> Предполагается, что DC будет один, а изображений, выводящихся
> на него, - несколько...
Тем лучше! Палитра задаётся для DC, а не для битмапа! Получаешь ты этот DC (тогда ессно у контрола а не у битмапа) и выводишь на него свои картинки.
AlexanderMS (2007-07-16 16:35:00) [3]Спасибо, но я без Canvas'a работаю.
> Если битмап имеет палитру, то просто заменить цвет в палитре.
А это как?
> Dib@zol © (16.07.07 13:52) [6]
Предполагается, что DC будет один, а изображений, выводящихся на него, - несколько...
Dib@zol (2007-07-16 13:52:00) [4]А может просто DIB + GetObject -> получаем палитру и DC, заменяем в ней нужные цвета и SelectPalette(DC, Palette, False) + RealizePalette(DC)? Если надо, кину пример.
homm (2007-07-16 10:49:00) [5]> Лучше пользуйте ScanLine и TRGBTriple.
А еще лучше ScanLine и TRGBQuad.
Инс (2007-07-16 09:59:00) [6]Если битмап имеет палитру, то просто заменить цвет в палитре.
MultIfleX (2007-07-16 09:23:00) [7]О боже мой!!! Теперь попробуй запустить данную функцию при разрешении картинки 500*500 к примеру..... АХТУНГ БЛИН!!!! Лучше пользуйте ScanLine и TRGBTriple.
Nikfel (2007-07-16 09:09:00) [8]Вот процедура. Сегодня написал, вроде работает.
//процедура для замены цвета в изображении и вывод изображения.
procedure setbitmap(image:Timage;height,width:integer;Bitmap:hbitmap;color1,color2:tcolor) ;
var i,p:integer;
t:tbitmap;
begin
t:=tbitmap.Create;
t.Handle:=Bitmap;
image.Width:=Width;
image.Height:=Height;
image.Canvas.Draw(0, 0,t);
p:=0;
while p<=Height-1 do begin
for i:=0 to Width-1 do begin
if image.Canvas.Pixels[i,p]=color1 then begin
image.Canvas.Pixels[i,p]:=color2;
end;
end;
P:=p+1;
end;
t.Free;
end;
//по нажатию кнопки.
procedure TForm1.Button1Click(Sender: TObject);
begin
setbitmap(image1,48,48,image2.Picture.Bitmap.Handle,clWhite,clBtnText);
end;
Nikfel (2007-07-16 08:07:00) [9]Для этого надо вывести изображение на canvas, затем использовать свойство Pixels[x,y]. Это свойство получает цвет заданной точки и позволяет его изменять. Думаю что разберешься.