PDA

View Full Version : نمایش چند تصویر روی یک تصویر زمینه و تبدیل همه آنها به یک عکس.



seifaddini
پنج شنبه 22 آذر 1386, 02:28 صبح
با سلام
من توی برنامه نویسی گرافیکی مبتدی هستم ولی باید یه برنامه ای رو بنویسم که بتونم یک عکس رو به عنوان زمینه باز کنم و چند عکس دیگه رو هم روی اون بچینم. عکسها بعد از چیده شدن باید قابل حرکت دادن باشند. در نهایت باید نتیجه را به فرمتی ذخیره کنم تا بعد از لود شدن مجدد لایه ها از یکدیگر جدا باشند.
در codeproject کدی که مشکلم را حل کند پیدا نکردم.
لطفا در هر مورد مرا راهنمایی کنید.
با تشکر.
ببخشید آیا این سئوال اینقدر سطح پایین هست که ارزش جواب دادن نداره یا اینکه کسی جوابش رو نمیدونه؟!!
لطفا یه نفر یه چیزی بگه. سرنخی، چیزی.

newgoldenman
جمعه 23 آذر 1386, 12:18 عصر
الگوریتمی که توی ذهن من الان نقش بست، شاید ساده باشه، ولی عملیه!
هر عکسی رو که میخوای Load کنی توی فرمت، یه دونه PictureBux جدید میسازی، عکست رو روی اون باز میکنی.
این PictureBox رو که خودت از قبل، به صورت یک کامپوننت شخصی ویرایشش کردی، این دو تا قابلیت رو داره:
1: Dragging
2: Resizing

شما الان روی فرمت، چندین تا Object از نوع PictureBox داری، هر کدوم از اونها دارای این صفات هستند:

1: اندازه
2: مکان
3: عکسی که وظیفه ی نمایشش رو داره

حالا شما میخوای این فایل رو ذخیره کنی، در واقع میخوای تمامی اطلاعات موجود رو ذخیره کنی.
برای این کار میتونی از فایل مسطح و یا بانک استفاده کنی.
برای Load کردن این اطلاعات، که در واقع همون Open کردن فایل ذخیره شده ی برنامه هست، دقیقاً همین اطلاعات رو Load میکنی و ...

sinpin
جمعه 23 آذر 1386, 14:45 عصر
در تایید و تکمیل راهنماییهای دوستمون جناب newgoldenman منم چند نکته اضافه میکنم :


الگوریتمی که توی ذهن من الان نقش بست، شاید ساده باشه، ولی عملیه!
هر عکسی رو که میخوای Load کنی توی فرمت، یه دونه PictureBux جدید میسازی، عکست رو روی اون باز میکنی.
این PictureBox رو که خودت از قبل، به صورت یک کامپوننت شخصی ویرایشش کردی، این دو تا قابلیت رو داره:
1: Dragging
2: Resizing

شما الان روی فرمت، چندین تا Object از نوع PictureBox داری، هر کدوم از اونها دارای این صفات هستند:

1: اندازه
2: مکان
3: عکسی که وظیفه ی نمایشش رو داره
بهتره که PictureBox هایی با قابلیت Transparent شدن داشته باشید.


حالا شما میخوای این فایل رو ذخیره کنی، در واقع میخوای تمامی اطلاعات موجود رو ذخیره کنی.
برای این کار میتونی از فایل مسطح و یا بانک استفاده کنی.
برای Load کردن این اطلاعات، که در واقع همون Open کردن فایل ذخیره شده ی برنامه هست، دقیقاً همین اطلاعات رو Load میکنی و ...
در اینصورت بنظر من بهتره با استفاده از سریالیزشین عملیات ذخیره رو انجام بدید. و برای loading هم از deserialization...

seifaddini
جمعه 23 آذر 1386, 16:16 عصر
با تشکر از دوستان عزیز به خاطر اشاره کردن به نکات کلیدی کار که قطعا مفید خواهند بود.
لطفا راهنمایی کنید برای شروع از GDI+ استفاده کنم یا باید سراغ directx بروم. آشنایی چندانی با هیچکدام ندارم.
برنامه ای که میخواهم بنویسم، باید چند عکس را بگیرد و کاربر به کمک آنها یک عکس جدید بسازد و بعدا بتواند آنرا تغییر دهد.
لطفا راهنمایی کنید برای شروع سراغ کدام روش بروم بهتر است(GDI،Directx،..)؟

seifaddini
سه شنبه 04 دی 1386, 22:26 عصر
با سلام
من فکر کنم راه حلی که جناب آقای newgoldenman (http://barnamenevis.org/forum/member.php?u=29000) vbmenu_register("postmenu_434206", true); دادند، راه حل خوبی هست. با تشکر از ایشون، حالا چطور میتونیم یک کامپوننت شخصی درست کنیم که در حالت اجرا یک picturebox با قابلیت dragging و resizing داشته باشیم. لطفا در این مورد به من کمک کنید.

Alireza_Salehi
چهارشنبه 05 دی 1386, 09:04 صبح
یک نرم افزار Opern Source و مجانی که با #C نوشته شده وجود داره ، می تونید با دانلود کردن Source آن جواب سوالتون رو پیدا کنید.

این برنامه بسیاری از امکانات فوتوشاپ رو داره از جمله Layer که جواب سوال شماست.


http://www.getpaint.net/images/Logo3.png (http://www.getpaint.net/download.html)


بعد از دانلود کردن Source، کدهای موجود در پوشه Data ، Effects و Actions را ببینید. تقریبا روش انجام اکثر کارهای گرافیکی را تنها با استفاده از کلاس های دات نت در این نرم افزار پیدا خواهید کرد. هر آنچه که بخواهید در namespace های زیر پیدا خواهید کرد و به Directx و +GDI هم نیازی نیست.

System.Drawing (http://msdn2.microsoft.com/en-us/library/system.drawing.aspx)
System.Drawing.Drawing2D (http://msdn2.microsoft.com/en-us/library/system.drawing.drawing2d.aspx)
System.Drawing.Imaging (http://msdn2.microsoft.com/en-us/library/system.drawing.imaging.aspx)
System.Drawing.Text (http://msdn2.microsoft.com/en-us/library/system.drawing.text.aspx)
System.Drawing.Printing (http://msdn2.microsoft.com/en-us/library/system.drawing.printing.aspx)