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

Вниз

Окрашивание ч/б спрайта в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.338 c
1-1159128493
dreamse
2006-09-25 00:08
2006.11.05
Создание компоненты с уже готовой формой


8-1143789307
Feg16
2006-03-31 11:15
2006.11.05
Вывод потокового звука


1-1159172427
Bless
2006-09-25 12:20
2006.11.05
Можно ли из procedure of object получить ссылку на объект


2-1161553712
nporaMep
2006-10-23 01:48
2006.11.05
Как получить путь к программе?


15-1161139835
Slider007
2006-10-18 06:50
2006.11.05
С днем рождения ! 18 октября





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский