Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Gnobobel ©   (2006-01-23 22:01:00) 

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


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

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

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


antonn   (2006-01-27 15:11:00) [2]

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


boalse   (2006-01-26 04:45:00) [3]

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


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

boalse

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


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

В смысле RGB?

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


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

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


Shirson   (2006-01-24 09:58:00) [7]

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


BoAlSe   (2006-01-24 08:39:00) [8]

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

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 не прокатит, подумай почему.


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо