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

Вниз

Окрашивание ч/б спрайта в DelphiX   Найти похожие ветки 

 
Gnobobel   (2006-01-23 22:01) [0]

У меня есть спрайт состоящий и белого и чёрного цвета (чёрный - прозрачный). Как окрасить белую часть в другой (RGB) цвет?


 
Gnobobel   (2006-01-23 22:10) [1]

P.S. okrashivat nado pri vivode. Toest iz odnogo spraita na ekran budet vilezat n kartinok raznih svetov.


 
BoAlSe ©   (2006-01-24 08:39) [2]

Сделай белый прозрачным, затем

var
 OutSurf: TDirectDrawSurface

в Tform1.Create:

OutSurf:=TDirectDrawSurface.Create(Form1.DXDraw1.surface.DDDraw);

OutSurf.SystemMemory:=true;//если false - то поверхность не сохранится при
//минимизации приложения, но при false - быстее работает, однако на своей
//машине разницы в быстродействии не заметил

with MainForm.DXImageList1.Items.Find("имя_спрайта") do
 begin
   SetSize(Width,Height);//Назначаем размер поверхности такойже, как и
//размер спрайта.
 end;
OutSurf.TransrarentColor:=clBlack;//Чёрный цвет - прозрачный

в Form.destroy не забудь убрать за собой:
OutSurf.Free;

Теперь, собственно, отрисовка:
With OutSurf.canvas do
 begin
   brush.Color:=clLime;//цвет, которым будет закрашиваться белая часть
   FillRect(ClientRect);//заливаем поверхность нужным цветом
   release;//надо
 end;
with MainForm.DXImageList1.Items.Find("имя_спрайта") do
 Draw(OutSurf,0,0,0);//Рисуем на поверхности OutSurf нужный спрайт
//при этом рисуется только чёрная его чать, а белая(прозрачная), само-
//сабой не рисуется, таким образом, на поверхности OutSurf имеем рисунок
//Чёрного цвета, на нужном нам фоне, короче, тотже спрайт, но только
//вместо белого, у него нужный тебе цвет. Осталось отрисовать эту
//поверхность там, где тебе надо, например:
Form1.DXDraw1.surface.Draw(X,Y,OutSurf.ClientRect,OutSurf,true);

Я таким образом вывожу разноцветный текст в своей игре - работает отменно, без тормозов. Правда brush.Color:=clBlack не прокатит, подумай почему.


 
Shirson ©   (2006-01-24 09:58) [3]

А если посомтреть код D2DRenderRotate, там можно обнаружить строчку
D2DEffectAdd($FF, $FF, $FF, $FF);
Рядом с кодом этой процедуры есть еще кучка:
D2DEffectCol
D2DEffectAddCol
D2DEffectSolid
D2DEffectBlend
D2DEffectMul
D2DEffectNone
Какая религия запретила использовать эти эффекты, по уму, разработчикам (un)DelphiX для меня глубочайшая загадка.
Если расширить стандартную команду draw(rotate) и передавать через неё больше параметров (цвета для 4х вершин и прозрачность) и подключить перечисленные эффекты, можно насыщаять изображения любым цветом, одной командой. Независимо от того, сколько цветов в изображении. При максимальной насыщенности изображение полностью перекрашивается. Можно расскрашивать 4 угла разными цветами и степенью прозрачности.


 
Gnobobel   (2006-01-24 17:29) [4]

BoAlSe
Без тормозов - хорошо, а можно ли канибудь использовать для этого палитру?


 
boalse ©   (2006-01-25 04:59) [5]

В смысле RGB?

В примре используется TColor, а как преобразовать RGB в TColor - спроси на www.delphiworld.narod.ru - примеров дофига.


 
Gnobobel   (2006-01-25 16:44) [6]

boalse

Кхе... просмотри декларейшен TRed и всё поймешь.


 
boalse ©   (2006-01-26 04:45) [7]

Что есть TRed и что именно я должен понять?


 
antonn ©   (2006-01-27 15:11) [8]

если это битмап 24-32 бита, то можно через scanline.
я просто не знаю, что там в DX...


 
Gnobobel   (2006-01-27 18:45) [9]

Пишешь Form1.Color := TRed;
хмакаешь файнд декларейшен, радуешься =)

Лана. Всем пасибо вроде понял, пойду делать.



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

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

Наверх




Память: 0.49 MB
Время: 0.137 c
3-1157532896
SergP.
2006-09-06 12:54
2006.11.05
Как предотвратить "обрезание" полей?


2-1160973386
Steep
2006-10-16 08:36
2006.11.05
Книга по Делфи 7


15-1160643476
xayam
2006-10-12 12:57
2006.11.05
Что дальше или в чем ВАШ смысл жизни?


6-1150353278
KirillSKTS
2006-06-15 10:34
2006.11.05
Accept, блокировка


15-1161027273
iZEN
2006-10-16 23:34
2006.11.05
Чем заканчивать проект?