Главная страница
    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.011 c
1-78930
Zheks
2003-11-12 10:14
2003.11.24
из байта в текст


14-79187
Delirium
2003-10-30 11:07
2003.11.24
Интересно работает оптимизатор...


14-79188
Думкин
2003-11-03 05:17
2003.11.24
С днем рождения! 3 ноября.


11-78875
Kladov
2003-03-06 21:23
2003.11.24
В преддверии версии 1.70


1-78977
texHelp
2003-11-14 20:43
2003.11.24
Написание PlugIna для PhotoShopa на Delphi





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