Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.051 c
2-1202723527
alexsashkan
2008-02-11 12:52
2008.03.09
Проблема с выборкой из базы


15-1201771165
Noter
2008-01-31 12:19
2008.03.09
Учебник


4-1182533535
Dio
2007-06-22 21:32
2008.03.09
RS-232 состояние RTS, DTR


3-1192783481
alsov
2007-10-19 12:44
2008.03.09
Поиск по blob полю


2-1202493954
Urvin
2008-02-08 21:05
2008.03.09
Вопрос по Virtual TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский