سلام دوستان.
یه کامپونت (Button یا Picturebox یا label هرچی بود) میخوام که یه تصویر PNG بگیره و قسمت های Transparent ش رو حذف کنه.(دقیقا حذف بشه نه اینکه فقط نشون نده );
اینم تصویر نمونه:
سلام دوستان.
یه کامپونت (Button یا Picturebox یا label هرچی بود) میخوام که یه تصویر PNG بگیره و قسمت های Transparent ش رو حذف کنه.(دقیقا حذف بشه نه اینکه فقط نشون نده );
اینم تصویر نمونه:
یعنی یه همچین کامپوننتی گیر نمیاد؟!!!!!!
یعنی چیکار کنه دقیقا؟!!!
تصویر رو چطوری بگیره؟
مگه png برای شما قسمت شفاف رو نشون میده؟
تا حالا من که چنین چیزی ندیدم.
مگه اینکه با یه سری کدنویسی دستی بتونی این کارو بکنی.
(ولی یادت باشه خود ماکروسافت هم از مستطیل استفاده کرده حتی توی جاهای دایره ای. مثل دکمه ی استارت منو توی گوشه ی سمت چپ)
چرا شفاف نشون میده ولی مشکل من اینه:
فرض کن من یه تصویر دایره دارم که اصرافش Transparent هستش ، وقتی من این تصویر رو توی یه PictureBox (که بصورت مستطیل هستش) قرار میدم ، قسمت های Transparent نشون داده نمیشن (تا اینجا مشکلی نیست و همه چیز بخوبی پیش میره).
مشکل اینه که وقتی ماوس وارد محدوده مستطیل شکل PictureBox میشه ، رویداد Mouse_Enter فراخونی میشه ، درحالی که من میخوام وقتی ماوس وارد قسمت های Transparent شد این رویداد فراخونی نشه (یعنی ماوس وقتی وارد دایره شد این رویداد فراخونی بشه).
حرف شما کاملا درسته.تا حالا من که چنین چیزی ندیدم.
مگه اینکه با یه سری کدنویسی دستی بتونی این کارو بکنی.
(ولی یادت باشه خود ماکروسافت هم از مستطیل استفاده کرده حتی توی جاهای دایره ای. مثل دکمه ی استارت منو توی گوشه ی سمت چپ)
ولی اینو ببین:
http://www.codeproject.com/KB/miscctrl/AlphaForm.aspx
اگه یه جوری میشد از این کامپوننت توی کنترل هایی غیر از فرم (مثل پنل) استفاده کنی خیلی خوب میشد.
من نتونستم ازش سر در بیارم.
wpf
درچند ثانیه
اگه از همون wpf استفاده کنی بهتره چون من خودم یه مدت خیلی افتاده بودم دنبالش اما نه کامپوننت درست حسابی گیر اوردم نه کد کاملی هر کدومشون مشکلات فاحشی داشتن!
آخه یه پروژه هستش که باید با فریم ورک ۲ بدیم.
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);
}
}
آها!
اونطوری بلد نیستم...
اما اگه تصویرت همون عکس توی پست اوله، رسمش با متدهای graphic path راحته. سینوس و کسینوس هم نمیخواد. فکر کنم با curve یا همچین چیزایی بشه رسمش کرد.چند تا نقطه میدی، خودش منحنیش میکنه.
https://barnamenevis.org/showthread.p...l=1#post914782
این کلیدها رو با همین روش ساخته بودم(زیاد خوشکل نیستن اما روش کار رو نشون میدن)
تشکر.
با این روش فقط میشه اشکال ساده رو طراحی کرد به علاوه اینکه من میخواستم لبه کارم smooth باشه که اینطور نمیشه.
فعلا همینطور یه چیزی درست میکنیم بره بعدا با wpf دریفش میکنیم.
اگه از کلاس graphics استفاده میکنه اینجوری smooth میشه:
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality ;