PDA

View Full Version : ایجاد tranceparent برای 2 ، pictureBox



bade saba
چهارشنبه 12 آبان 1389, 17:07 عصر
سلام خدمت دوستان برنامه نویس

من در داخل برنامم 3 تا pictueBox دارم که دوتار اونها روی اولی قرار میگیرن دو pictureBox که بر روی اولی هستند به شکل tranceparent هستند من با قرار دادن backColor اونها به transeparent و این دو خط کد زیر



pictureBox2.Parent = pictureBox1;
pictureBox3.Parent = pictureBox1;


تونستم اونهارو transeparent کنم اما مشکل اینجاست که بخشی از این دو تا عکس روی هم میوفته و به جای این که picturebox2 اون تیکه از PictureBox3 رو که زیرشه نشون بده pictureBox1 رو نشون میده چی کار کنم که این مشکل حل بشه ؟؟؟

چند تا مورد رو بگم
اول این که اگه خاصیت parent رو ست نکنم اصلا pictureBox ها هیچ کدوم transeparent نمیشن
دوم این که عکس ها همه gif هستند و transeparent

و اینم بگم 3 تا فایل ضمیمه کردم یکی خود پروژه هستش عکس Untitled.jpg (http://www.barnamenevis.org/forum/attachment.php?attachmentid=59565&stc=1&d=1288791904) دومین عکس نتیجه ای هست که برنامه میده و عکس 2.jpg (http://www.barnamenevis.org/forum/attachment.php?attachmentid=59564&stc=1&d=1288791904) عکس اول اون نتیجه ای هست که من میخوام ایجاد بشه

ممنون

2ndesigner
پنج شنبه 13 آبان 1389, 00:32 صبح
من برای برنامه های گرافیکی معمولاً از WPF استفاده می کنم چون یه همچین مشکلاتی رو نداره به شما هم توصیه می کنم.


2ndesigner

bade saba
پنج شنبه 13 آبان 1389, 00:42 صبح
ممنون از توجه تون اما این نکته ای که من گفتم یه بخش کوچیک از یه پروژه هست که تمامش در winApp به این صورت نوشته شده
آیا اکان ایجاد این بخش با WPF و انتقالش و کار با اون در بدنه اصلی برنامه هست؟؟؟ و اگه بله میشه یه مثال بزنید و توضیح بدید؟؟؟

cardano7
پنج شنبه 13 آبان 1389, 04:25 صبح
راستش به نظر من صحنه ی واقعا عجیبی بود و به نظر می رسه که اشتباه از خود دات نت باشه.
به هر حال من کد شما رو اصلاح کردم و کار کرد.


//pictureBox2.Parent = pictureBox1;
//pictureBox3.Parent = pictureBox1;
pictureBox2.Visible = false;
pictureBox3.Visible = false;
Bitmap img = new Bitmap(new Bitmap(pictureBox1.Image));
using (Graphics g = Graphics.FromImage(img))
{
g.DrawImage(pictureBox2.Image, pictureBox2.Location);
g.DrawImage(pictureBox3.Image, pictureBox3.Location);
}
pictureBox1.Image = img;
pictureBox1.Refresh();

bade saba
پنج شنبه 13 آبان 1389, 09:17 صبح
دوست عزیز من کدی که شما گفتید رو جایگزین کردم اما اون نتیجه که باید رو نگرفتم حاصل اینجوری بود که مربع و مثلث کلا خذف شدن
من برنامرو اینجا میزارم ممنون میشم بگید ایراد کارم چیه

bade saba
پنج شنبه 13 آبان 1389, 10:02 صبح
من با اضافه کردن خط زیر به خطایی که شما گذاشتید نتیجه گرفتم اما لطف کن این کد رو یه توضیحی بده



pictureBox1.Image = img;


منظورم از توضیح توضیح این کیس هستش


using (Graphics g = Graphics.FromImage(img))
{

{

cardano7
پنج شنبه 13 آبان 1389, 20:10 عصر
من با اضافه کردن خط زیر به خطایی که شما گذاشتید نتیجه گرفتم


pictureBox1.Image = img;



اگر منظور شما افزودن این خط هست:

pictureBox1.Image = img;

باید بگم که این خط در بین کدهای خود من هم که بود.(خط یکی به آخر مونده)


منظورم از توضیح توضیح این کیس هستش
توضیح کدوم؟ using یا کلاس Graphics ؟
یک شی گرافیکی ایجاد می کنم. عکس اون در ابتدا برابر عکس pictureBox1 هست. بعد عکس pictureBox2 و pictureBox3 را هم روی اون نقاشی می کنیم. بعد این عکس بدست آمده را میریزیمش دوباره توی خود عکس pictureBox1.
کار بلاک using در اینجا اینه که بعد اینکه کارش با g تمام شد، اون را نابود کنه.

جاییش باز هم مبهم بود بگو.

bade saba
پنج شنبه 13 آبان 1389, 23:07 عصر
بله شما درست میگید من اون خط کد رو ندیده بودم

میشه راجب به using یه مقداری بیشتر توضیح بدید گرچه مربوط به عنوان این تاپیک که ایجاد کردم نمیشه

cardano7
جمعه 14 آبان 1389, 00:50 صبح
بله شما درست میگید من اون خط کد رو ندیده بودم

میشه راجب به using یه مقداری بیشتر توضیح بدید گرچه مربوط به عنوان این تاپیک که ایجاد کردم نمیشه

در مورد Dispose در #C جستجو (http://www.google.com/search?hl=en&safe=off&client=firefox-a&hs=M0S&rlz=1R1GGLL_en___MY394&&sa=X&ei=6yjTTMaQGJCkvgOu9tH7Dg&ved=0CBYQvwUoAQ&q=C%23+Dispose+using&spell=1)کنید.

http://www.codeproject.com/KB/cs/tinguusingstatement.aspx

این یک نمونه لینک که بعدش می تونه کمک کنه. و میاد ارتباط using را با Dispose توضیح میده.
http://barnamenevis.org/forum/showthread.php?p=1019938#post1019938