Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.09;
Скачать: CL | DM;

Вниз

Рисование с изменённой палитрой.   Найти похожие ветки 

 
AlexanderMS ©   (2007-07-16 05:06) [0]

Допустим, есть изображение (HBITMAP). Как его вывести так, чтобы в выведенном изображении был заменен, к примеру, красный цвет на синий, а белый - на чёрный?


 
Nikfel ©   (2007-07-16 08:07) [1]

Для этого надо вывести изображение на canvas, затем использовать свойство Pixels[x,y]. Это свойство получает цвет заданной точки и позволяет его изменять. Думаю что разберешься.


 
Nikfel ©   (2007-07-16 09:09) [2]

Вот процедура. Сегодня написал, вроде работает.
//процедура для замены цвета в изображении и вывод изображения.
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;


 
MultIfleX   (2007-07-16 09:23) [3]

О боже мой!!! Теперь попробуй запустить данную функцию при разрешении картинки 500*500 к примеру..... АХТУНГ БЛИН!!!! Лучше пользуйте ScanLine и TRGBTriple.


 
Инс ©   (2007-07-16 09:59) [4]

Если битмап имеет палитру, то просто заменить цвет в палитре.


 
homm ©   (2007-07-16 10:49) [5]

> Лучше пользуйте ScanLine и TRGBTriple.

А еще лучше ScanLine и TRGBQuad.


 
Dib@zol ©   (2007-07-16 13:52) [6]

А может просто DIB + GetObject -> получаем палитру и DC, заменяем в ней нужные цвета и SelectPalette(DC, Palette, False) + RealizePalette(DC)? Если надо, кину пример.


 
AlexanderMS ©   (2007-07-16 16:35) [7]

Спасибо, но я без Canvas"a работаю.


> Если битмап имеет палитру, то просто заменить цвет в палитре.

А это как?


> Dib@zol ©   (16.07.07 13:52) [6]


Предполагается, что DC будет один, а изображений, выводящихся на него, - несколько...


 
Dib@zol ©   (2007-07-16 16:49) [8]


> Предполагается, что DC будет один, а изображений, выводящихся
> на него, - несколько...

Тем лучше! Палитра задаётся для DC, а не для битмапа! Получаешь ты этот  DC (тогда ессно у контрола а не у битмапа) и выводишь на него свои картинки.


 
AlexanderMS ©   (2007-07-16 18:53) [9]


> Тем лучше! Палитра задаётся для DC, а не для битмапа! Получаешь
> ты этот  DC (тогда ессно у контрола а не у битмапа) и выводишь
> на него свои картинки.

Прошу прощения, не так выразился. Я имел ввиду следующее: к примеру, поменять красный цвет на синий на одном рисунке, зелёный на жёлтый - на другом, и всё это вывести на DC...

Просто я прочитал про механизм вывода изображений у игровых приставок: там каждому изображению настраивают палитру и выводят с этой палирой, создавая, к примеру, эффект переливания картинки цветами, блеска цвета, да и просто выводят несколько одинаковых по виду (за исключением цвета) объектов (типа машин в гоночках: все Ferrari, но одна - красная, другая - синяя и т. п.)



Страницы: 1 вся ветка

Текущий архив: 2008.03.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.16 c
2-1202739868
patrick1968
2008-02-11 17:24
2008.03.09
Проблема с написанием Service а


15-1202038145
Галинка
2008-02-03 14:29
2008.03.09
Вопрос к преподавателям


2-1202820730
dusha
2008-02-12 15:52
2008.03.09
И снова динамические ставки


3-1192783500
DelphiN!
2007-10-19 12:45
2008.03.09
SQL по выводу постоянных пользователей


15-1202127812
xayam
2008-02-04 15:23
2008.03.09
Проект "Россия"