PDA

View Full Version : درخواست یه Image Button با قابلیت استفاده از تصاویر PNG



Open-Source
پنج شنبه 22 اردیبهشت 1390, 01:56 صبح
سلام دوستان.
یه کامپونت (Button یا Picturebox یا label هرچی بود) میخوام که یه تصویر PNG بگیره و قسمت های Transparent ش رو حذف کنه.(دقیقا حذف بشه نه اینکه فقط نشون نده );

اینم تصویر نمونه:
http://themesky.persiangig.com/Untitled-1.png

Open-Source
پنج شنبه 22 اردیبهشت 1390, 19:13 عصر
یعنی یه همچین کامپوننتی گیر نمیاد؟!!!!!!

Rejnev
پنج شنبه 22 اردیبهشت 1390, 19:21 عصر
یعنی چیکار کنه دقیقا؟!!!
تصویر رو چطوری بگیره؟
مگه png برای شما قسمت شفاف رو نشون میده؟

sinashahab
پنج شنبه 22 اردیبهشت 1390, 19:47 عصر
تا حالا من که چنین چیزی ندیدم.

مگه اینکه با یه سری کدنویسی دستی بتونی این کارو بکنی.

(ولی یادت باشه خود ماکروسافت هم از مستطیل استفاده کرده حتی توی جاهای دایره ای. مثل دکمه ی استارت منو توی گوشه ی سمت چپ)

Open-Source
پنج شنبه 22 اردیبهشت 1390, 19:49 عصر
یعنی چیکار کنه دقیقا؟!!!
تصویر رو چطوری بگیره؟
مگه png برای شما قسمت شفاف رو نشون میده؟

چرا شفاف نشون میده ولی مشکل من اینه:

فرض کن من یه تصویر دایره دارم که اصرافش Transparent هستش ، وقتی من این تصویر رو توی یه PictureBox (که بصورت مستطیل هستش) قرار میدم ، قسمت های Transparent نشون داده نمیشن (تا اینجا مشکلی نیست و همه چیز بخوبی پیش میره).

مشکل اینه که وقتی ماوس وارد محدوده مستطیل شکل PictureBox میشه ، رویداد Mouse_Enter فراخونی میشه ، درحالی که من میخوام وقتی ماوس وارد قسمت های Transparent شد این رویداد فراخونی نشه (یعنی ماوس وقتی وارد دایره شد این رویداد فراخونی بشه).




تا حالا من که چنین چیزی ندیدم.

مگه اینکه با یه سری کدنویسی دستی بتونی این کارو بکنی.

(ولی یادت باشه خود ماکروسافت هم از مستطیل استفاده کرده حتی توی جاهای دایره ای. مثل دکمه ی استارت منو توی گوشه ی سمت چپ)


حرف شما کاملا درسته.
ولی اینو ببین:
http://www.codeproject.com/KB/miscctrl/AlphaForm.aspx
اگه یه جوری میشد از این کامپوننت توی کنترل هایی غیر از فرم (مثل پنل) استفاده کنی خیلی خوب میشد.
من نتونستم ازش سر در بیارم.

arefba
جمعه 23 اردیبهشت 1390, 03:35 صبح
wpf
درچند ثانیه

haghft
جمعه 23 اردیبهشت 1390, 09:47 صبح
اگه از همون wpf استفاده کنی بهتره چون من خودم یه مدت خیلی افتاده بودم دنبالش اما نه کامپوننت درست حسابی گیر اوردم نه کد کاملی هر کدومشون مشکلات فاحشی داشتن!

Open-Source
جمعه 23 اردیبهشت 1390, 10:38 صبح
آخه یه پروژه هستش که باید با فریم ورک ۲ بدیم.:گریه:

Rejnev
شنبه 24 اردیبهشت 1390, 10:08 صبح
public class pic : PictureBox
{
protected override void OnPaint(PaintEventArgs pevent)
{
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddEllipse(0, 0, Width, Height);
this.Region = new Region(gp);
base.OnPaint(pevent);
}
}

Open-Source
شنبه 24 اردیبهشت 1390, 21:26 عصر
public class pic : PictureBox
{
protected override void OnPaint(PaintEventArgs pevent)
{
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddEllipse(0, 0, Width, Height);
this.Region = new Region(gp);
base.OnPaint(pevent);
}
}


تشکر.
چیز خوبی بود.

فقط اگه میشه بهش بفهمونی که ناحیه مورد نظر رو از روی یه تصویر PNG ترسیم کنه خیلی خوب میشد.

اینطوری علاوه بر اینکه وقت گیر هستش ، اگه خواسته باشی یه ناحیه دلخواه رسم کنی باید درگیر Sin,Cos,... اینجور چیزا بشی .

Rejnev
یک شنبه 25 اردیبهشت 1390, 12:09 عصر
آها!
اونطوری بلد نیستم...
اما اگه تصویرت همون عکس توی پست اوله، رسمش با متدهای graphic path راحته. سینوس و کسینوس هم نمیخواد. فکر کنم با curve یا همچین چیزایی بشه رسمش کرد.چند تا نقطه میدی، خودش منحنیش میکنه.
http://barnamenevis.org/showthread.php?205930-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%81%D8%B1%D9%85%DB%8C-%D8%A8%D8%A7-opacity0&p=914782&viewfull=1#post914782
http://barnamenevis.org/attachment.php?attachmentid=44434&stc=1&d=1266709230
این کلیدها رو با همین روش ساخته بودم(زیاد خوشکل نیستن اما روش کار رو نشون میدن)

Open-Source
یک شنبه 25 اردیبهشت 1390, 21:06 عصر
تشکر.
با این روش فقط میشه اشکال ساده رو طراحی کرد به علاوه اینکه من میخواستم لبه کارم smooth باشه که اینطور نمیشه.

فعلا همینطور یه چیزی درست میکنیم بره بعدا با wpf دریفش میکنیم.

haghft
یک شنبه 25 اردیبهشت 1390, 23:42 عصر
اگه از کلاس graphics استفاده میکنه اینجوری smooth میشه:
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality ;