Форум: "Игры";
Текущий архив: 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.042 c