Изменение гаммы спрайтаDelphi , Графика и Игры , DirectX и DelphiXИзменение гаммы спрайта
Оформил: XVeL Ну что не поняли? Показываю:
Как это делатся. Динамически создается новый спрайт с подложкой нужного цвета (фон) и на него накладывается с использованием Альфа смешения наш спрайт. Чем больше величина Альфа, тем больше будет "проявляться" фон, соответственно, если "фон" белый - спрайт будет осветляться. Что касается TransparentColor - если фоновый цвет спрайта будет отличаться от "подложки" создаваемого спрайта, то придется подумать как определить новый TransparentColor. Можно конечно заранее его просчитать и использовать, а можно просчитать динамически, взяв, например, цвет фоновой точки (посмотрите координаты какой нибудь из них в редакторе) в полученном спрайте. Посмотрим на примере. Эта процедурка реализует алгоритм описанный выше. procedure Tform1.createmmap(Color:Tcolor;alpha:byte); var NG : TDIB; Item: TPictureCollectionItem; tm:Tdirectdrawsurface; i:integer; est:boolean; //Присутствует ли уже измененная картика в списке TC:TColor; //TransparentColor begin ng:=tdib.Create; //Создаем картинку (пустую) tm:=Tdirectdrawsurface.Create(DXDraw.Surface.DDraw); //Создаем поверхность tm.SystemMemory:=false; tm.SetSize(il.Items[0].Width,il.Items[0].height); //Устанавливаем размер поверхности по размеру исходной картинки tm.Fill(color); //Заполняем фон нужным цветом il.Items[0].DrawAlpha(tm,bounds(0,0,il.Items[0].width,il.Items[0].height),0,alpha); //Рисуем исходную картинку на фон с прозрачностью tm.AssignTo(ng); //Сохраняем изображение в картинку (создана первой строкой) tm.Free; //Очищаем память от поверхности TC:=ng.Canvas.Pixels[0,0]; //Возьмем цвет точки 0,0 в качестве TransparentColor для нового спрайта est:=false; //Ставим на нет, то что картинка уже есть в списке for i:=0 to il.Items.Count-1 do //Если же она есть if il.Items[i].Name='MMG' then est:=true; //ТО Ставим на Да if est then //Если ДА то begin //Изменяем уже существующую картинку item:=il.Items.Find('MMG'); item.Picture.Graphic := ng; item.TransparentColor:=TC; item.Transparent:=true; item.Restore; end else begin //Если же Нет, то заносим в список новую! Item := TPictureCollectionItem.Create(IL.Items); Item.Name:='MMG'; Item.SystemMemory:=false; Item.Picture.Graphic := ng; Item.TransparentColor:=TC; Item.Transparent:=true; Item.Restore; end; end; Вот и все. Возмите этот готовый примерчик. Статья Изменение гаммы спрайта раздела Графика и Игры DirectX и DelphiX может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DirectX и DelphiX ::
|
||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |