PDA

View Full Version : سوال: Delphi Xe 2 Fire Monkey Image Texture Coordinate



ahmadi3d_ali
جمعه 03 شهریور 1391, 18:08 عصر
سلام
دوستان می خواستم بدونم من یه عکس دارم فرض کنید 4096*2048 که در داخلش 100 عکس چیز های مختلف هست! من این عکس را توی یک bitmap لود کردم! چطور میشه مختصات برش های مختلف را در نظر گرفت و هر کدوم را در یک image جداگانه لود کرد یا همون مشخص کردن texture Coordinate!
کار بالا در عنوان تاپیک انجام شده است
ممنون

Ananas
جمعه 03 شهریور 1391, 20:17 عصر
سلام.
این کار با Mesh میشه و فکر میکنم برای Image نتونی texcoord تعیین کنی.

ahmadi3d_ali
جمعه 03 شهریور 1391, 21:22 عصر
یعنی هیچ راهی نیست که نیازی به بقیه کامپوننت ها نداشته باشه!؟؟؟ بابا فایر مانکی یعنی یه چیز به این سادگی را هم نداره؟!
من کامپوننتی که این قابلیت را داشته باشه میشناسم ولی می خوام دنبالش نرم و با همین Firemonkey کار کنم!
دوستان اگر کسی چیزی می دونه لطفا بگید
ممنون

Ananas
جمعه 03 شهریور 1391, 22:20 عصر
نخیر، شما می خوای کد تیکه تیکه کردن عکس رو خودت ننویسی. کار سختی نیست می تونی از تابع TBitmap.Canvase.Draw استفاده کنی برای هر کادر مستطیلی که می خوای از عکس بگیری یک عکس بساز و اون مستطیل رو توش کپی کن.
البته برای استفاده های زیاد از قسمت های تکراری شاید کار خیلی حافظه مصرف کن ای باشه ولی اینم یه راهه دیگه.
بعدشم مگه نمی خوای از Image استفاده کنی؟ خوب بجاش از TMesh استفاده کن دیگه. دقیقا می خوای چه کار کنی؟ فقط می خوای عکس رو نمایش بدی؟ یا می خوای عکس رو تغییر هم بدی؟ یا چه کارهای دیگه ای با Image می خوای انجام بدی؟

Felony
جمعه 03 شهریور 1391, 22:23 عصر
باید خودتون توسط Canvas عملیات مورد نظر رو پیاده کنید ؛ کار کردن با Canvas در Fire Monkey با VCL کمی متفاوت هست ، نمونه ضمیمه رو قبلا برای Crop کردن یک تصویر Bitmap توسط Canvas در Fire Monkey نوشته بودم که میتونید با کمی دستکاری به چیزی که در نظر دارید تبدیلش کنید .

موفق باشید .

ahmadi3d_ali
جمعه 03 شهریور 1391, 23:42 عصر
خیلی ممنون مجتبی جان!
به نظر همون چیزی میاد که می خواستم من کد را تغییر میدم امید وارم این دیگه کاری که می خوام را انجام بده!

Ananas
شنبه 04 شهریور 1391, 00:32 صبح
کد ایشون رو تغییر دادم برای استفاده تو حلقه :

procedure CopyImageRect(imgSource, imgDest : TImageControl; left, top , width, height : Single );
begin
imgDest.Bitmap.Canvas.BeginScene;
imgDest.Bitmap.Canvas.DrawBitmap(
imgSource.Bitmap,
RectF(left, top, left + width, top + height),
RectF( 0 , 0 , imgDest.Bitmap.Width, imgDest.Bitmap.Height),
1,
True);
imgDest.Bitmap.Canvas.EndScene;
imgDest.UpdateStyle;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
arrImg : array of TImageControl;
i: Integer;
j: Integer;
begin
SetLength(arrImg, 4);
arrImg[0] := ImageControl1;
arrImg[1] := ImageControl2;
arrImg[2] := ImageControl3;
arrImg[3] := ImageControl4;
for i := 0 to 1 do
begin
for j := 0 to 1 do
begin
CopyImageRect(imgMain, arrImg[i * 2 + j], j * 500 , i * 500 , 500 , 500 );
end;
end;
end;