Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рисование тени, тень как в героях ММ 3 
:(
    Опции темы
СЭНСЭЙ
Дата 18.4.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Добрый день

значсит делаю так: (для примера использую ресурсы из ГММ3)
Код

procedure copybmpwithshadows(clshad1,clshad2,trans:Tcolor;dx,dy:integer; var dest,src:tbitmap);//dest - битмэп с картой
// на которой уже территории и другие объекты,src - битмэп ресурса из героев
//clshad1 - цвет тени номер 1 - более темной
//clshad2 - цвет тени номер два - более светлой
var
tc:tcolor;
i,j,r,g,b:integer;
target,bufsrc:tbitmap;
P : PByteArray;
begin
target:=tbitmap.Create;
target.Width:=src.Width;
target.Height:=src.Height;
bufsrc:=tbitmap.Create;
bufsrc.Width:=src.Width;
bufsrc.Height:=src.Height;
bitblt(target.Canvas.Handle,0,0,dest.Width,dest.Height,dest.Canvas.Handle,dx,dy,srccopy);
bitblt(bufsrc.Canvas.Handle,0,0,dest.Width,dest.Height,src.Canvas.Handle,0,0,srccopy);
for i:=0 to src.Width-1 do
for j:=0 to src.Height-1 do
begin
if bufsrc.Canvas.Pixels[i,j]=clshad1 then
begin
tc := ColorToRGB(target.Canvas.Pixels[i,j]);
r := GetRValue(tc)-50;if r<0 then r:=0;
g := GetGValue(tc)-50;if g<0 then g:=0;
b := GetBValue(tc)-50;if b<0 then b:=0;
target.Canvas.Pixels[i,j] :=rgb(r,g,b);
bufsrc.Canvas.Pixels[i,j]:=trans;
end;
if src.Canvas.Pixels[i,j]=clshad2 then
begin
tc := ColorToRGB(target.Canvas.Pixels[i,j]);
r := GetRValue(tc)-20;if r<0 then r:=0;
g := GetGValue(tc)-20;if g<0 then g:=0;
b := GetBValue(tc)-20;if b<0 then b:=0;
target.Canvas.Pixels[i,j] :=rgb(r,g,b);
bufsrc.Canvas.Pixels[i,j]:=trans;
end;
end;

bitblt(dest.Canvas.Handle,dx,dy,target.Width,target.Height,target.Canvas.Handle,0,0,srccopy);
bufsrc.Transparent:=true;
bufsrc.TransparentColor:=trans;
dest.Canvas.Draw(dx,dy,bufsrc);
target.Free;
bufsrc.Free;
end;



все хорошо, но работает очень медленно
подскажите возможные более быстрые алгоритмы
желательно пример
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.