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

Вниз

Как наложить 3 изображения одно на другое?   Найти похожие ветки 

 
greenrul   (2003-05-18 00:04) [0]

Есть a:TImageSprite, который создается динамически. Есть картинки, "1","2","3" - как в этот спрайт загнать эти 3 картинки наложив одну на другую? Пробую:



a:=TImageSprite.Create(SpriteEngine.engine); {обратите внимание - спрайт создается в runtime - может у меня из-за этого баги?}
for i:=1 to 3 do
begin
( IntToStr(i)
Есть a:TImageSprite, который создается динамически. Есть картинки, "1","2","3" - как в этот спрайт загнать эти 3 картинки наложив одну на другую? Пробую:



a:=TImageSprite.Create(SpriteEngine.engine); {обратите внимание - спрайт создается в runtime - может у меня из-за этого баги?}
for i:=1 to 3 do
begin
a.image:=Images.items.find(IntToStr(i));
a.x:=10;
a.y:=10;
a.z:=10;
a.width:=a.image.width;
a.height:=a.image.height;
a.image.transparent:=true;
a.image.transparentcolor:=clRed;
a.visible:=true
end;



Отображается ТОЛЬКО последний слой... Заранее прошу не предлагать метод склеивания картинок через TCanvas, так как убедительно считаю его тормозным для кучи тайлов.


 
Проходил мимо...   (2003-05-18 00:48) [1]

А почему должны отображаться другие...
В а копируется последнее изображение и никаких слоев тут нет, так что прийдется поработать ручками и сделать какое нибудь подобие blender"а, напримет изображения загружать в TBitmap и проводить "сложнейшие операции" по смешиванию картинок, другого пути видимо нет.


 
greenrul   (2003-05-18 15:05) [2]

Пример неработающей процедуры:

function CombineImages(a1,a2:string):TPicture;
var b1,b2,b3:TBitmap;
( a1)
Пример неработающей процедуры:

function CombineImages(a1,a2:string):TPicture;
var b1,b2,b3:TBitmap;
b:TPicture;
begin
b1:=TBitmap.Create;
b2:=TBitmap.Create;
b3:=TBitmap.Create;
b:=TPicture.Create;
b1:=MainForm.images.Items.Find(a1).Picture.bitmap;
b1.Width:=MainForm.images.Items.Find(a1).Picture.width;
b1.Height:=MainForm.images.Items.Find(a1).Picture.height;
b2:=MainForm.images.Items.Find(a2).Picture.bitmap;
b2.Width:=MainForm.images.Items.Find(a2).Picture.width;
b2.Height:=MainForm.images.Items.Find(a2).Picture.height;
b2.Transparent:=True;
b3.Width:=b2.Width;
b3.Height:=b2.Height;
b3.Canvas.Draw(0,0,b1);
b3.Canvas.Draw(0,0,b2);
b.Assign(b3);
CombineImages:=b;
b1.free;
b2.free;
b3.free;
b.free;
end;


Вызываю -
Tiles[xx,yy]:=TImageSprite.Create(MainForm.DXSpriteEngine1.Engine);
Tiles[xx,yy].Clear;
Tiles[xx,yy].Image.Picture:=CombineImages("606","607"); {Здесь вылетает error}
Tiles[xx,yy].z:=...
Tiles[xx,yy].Width:=...
Tiles[xx,yy].Height:=...
Tiles[xx,yy].x:=...
Tiles[xx,yy].y:=...
Tiles[xx,yy].Image.Transparent:=true;
Tiles[xx,yy].Image.TransparentColor:=clRed;
Tiles[xx,yy].Visible:=true;
Tiles[xx,yy].PixelCheck:=false;



Где я ошибся?


 
Agent[007]   (2003-05-18 21:32) [3]

мне кажется, что надо 3 переменных: a, b, c; и тогда они наложаться... :)))


 
greenrul   (2003-05-18 21:36) [4]

Но выходные данные должны быть - TImage - у меня работал пример:

b1:=TBitmap.Create;
b2:=TBitmap.Create;
b3:=TBitmap.Create;

b1.LoadFromFile("c:\1.bmp");
b2.LoadFromFile("c:\2.bmp");

b2.Transparent:=True;

b3.Width:=b1.Width; b3.Height:=b1.Height;
b3.Canvas.Draw(0,0,b1);
b3.Canvas.Draw(0,0,b2);

Pict.Assign(b3);

b1.free;
b2.free;
b3.free;


 
cyborg   (2003-05-18 21:57) [5]

Как всё запущено...

Задания для размышления:

1. Ты уверен, что MainForm.images.Items.Find(a1).Picture.bitmap; всегда будет находить твой а1?
Если не находит, то что произойдёт?

2. CombineImages:=b; b.free; Какое значение имеет Result и что получается в итоге?

И вопрос интересующий меня :):
Зачем ты копируешь три картинки в одну?


 
greenrul   (2003-05-18 21:58) [6]

Прошу прощения, немного наглючил, но все равно НЕ РАБОТАЕТ:
вызов :
Tiles[xx,yy].Image.Picture.Assign(CombineImages("606","607"));

сама процедура:
function CombineImages(a1,a2:string):TBitmap;
var ( a1)
Прошу прощения, немного наглючил, но все равно НЕ РАБОТАЕТ:
вызов :
Tiles[xx,yy].Image.Picture.Assign(CombineImages("606","607"));

сама процедура:
function CombineImages(a1,a2:string):TBitmap;
var b1,b2,b3:TBitmap;
begin
b1:=TBitmap.Create;
b2:=TBitmap.Create;
b3:=TBitmap.Create;

b1:=MainForm.images.Items.Find(a1).Picture.bitmap;
b1.Width:=MainForm.images.Items.Find(a1).Picture.width;
b1.Height:=MainForm.images.Items.Find(a1).Picture.height;

b2:=MainForm.images.Items.Find(a2).Picture.bitmap;
b2.Width:=MainForm.images.Items.Find(a2).Picture.width;
b2.Height:=MainForm.images.Items.Find(a2).Picture.height;

b2.Transparent:=True;

b3.Width:=b2.Width;
b3.Height:=b2.Height;

b3.Canvas.Draw(0,0,b1);
b3.Canvas.Draw(0,0,b2);

CombineImages:=b3;

b1.free;
b2.free;
b3.free;
end;


 
greenrul   (2003-05-18 22:01) [7]

1. Уверен.
2. Access violation at 00000038 accessing 00000038
не очень понимаю как узнать result, если такая фигня творится.

3. Не три, а две - у меня несколько слоев для тайловой карты, хочу совместить в один


 
greenrul   (2003-05-18 22:29) [8]

Удивительно - делаю b3.savetofile - сохраняется нормально...
очень странно - ведь передаю TBitmap, получаю Picture.Bitmap:=Result...


 
cyborg   (2003-05-18 22:52) [9]

CombineImages:=b3; и есть Result:=b3;;

1. А я бы на твоём месте небыл бы так уверен, хотя тебе виднее.

2. опять же делаешь CombineImages:=b3; b3.free;

Если не догадался, ответ на мой вопрос такой, ты назначаешь результату функции картинку б3, затем ты эту картинку освобождаешь, но функция указывает на адрес этой картинки, которой уже нет, поэтому и ацесвиолатион.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-78900
_jek
2003-11-14 18:58
2003.11.24
Текстовые файлы и ADO


3-78782
Term
2003-11-05 16:31
2003.11.24
DBGried.......


1-78910
kull
2003-11-10 12:17
2003.11.24
Как прочитать из stderr?


3-78790
Alibaba
2003-11-04 13:17
2003.11.24
Результат


3-78765
Plt
2003-10-31 15:45
2003.11.24
Как получить дату и время





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