سلام
کسی میتونه کمکم کنه که وقتی با موس میرم رو image تعقیر حالت بده مثلا سیاه سفید شه یا ....
ممنونم
سلام
کسی میتونه کمکم کنه که وقتی با موس میرم رو image تعقیر حالت بده مثلا سیاه سفید شه یا ....
ممنونم
خدمت شما :
public Bitmap GrayScale_Maker(Bitmap bmp)//a
{
Bitmap res = new Bitmap(bmp.Width, bmp.Height);//b
for (int i = 0; i < bmp.Height; i++)//c
{
for (int j = 0; j < bmp.Width; j++)//d
{
Color cr = bmp.GetPixel(j, i);//e
int code = (int)((cr.R + cr.B + cr.G) / 3);//f
res.SetPixel(j, i, Color.FromArgb(code, code, code));//g
}
}
return res;//h
}
در رویداد کلیک:
private void btnStatePower_Click_1(object sender, EventArgs e)//a
{
Bitmap b = new Bitmap(picMain.Image, picMain.Size);//b
Image img = GrayScale_Maker(b);//c
picRes.Image = img;//d
}
ماوس هم که گفتی به جای رویداد باتن از رویدادهای ماوس(مثلاً (Mouse_Enter استفاده کن .
آخرین ویرایش به وسیله harani : دوشنبه 16 مرداد 1391 در 11:56 صبح
کافیه معدل مجموع 3 رنگ (آبی قرمز سبز)پیکسلها را بگیری و بجای رنگ اصلی ست کنی. ضمنا در هنگام زدن تاپیک فارسی را هم درست پاس بدارید. تغییر رنگ درسته
سلام
از این متود هم میتونید برای سیاه سفید کردن استفاده کنید:
public static Bitmap MakeGrayscale(Bitmap original)
{
Bitmap newBitmap =new Bitmap(original.Width, original.Height);
for(int i =0;i <original.Width;i++)
{
for(int j =0;j <original.Height;j++)
{
Color originalColor =original.GetPixel(i, j);
int grayScale =(int)((originalColor.R*.3)+(originalColor.G*.59)
+(originalColor.B*.11));
Color newColor =Color.FromArgb(grayScale, grayScale, grayScale);
newBitmap.SetPixel(i, j, newColor);
}
}
return newBitmap;
}
که البته خیلی کند عمل میکند. برای اینکه سریع این عمل را انجام دهید:
//in the name of god
using System.Drawing.Imaging;
//...
public static Bitmap ToGrayscale(Bitmap original)
{
Bitmap newBitmap =new Bitmap(original.Width, original.Height);
Graphics g =Graphics.FromImage(newBitmap);
ColorMatrix colorMatrix =new ColorMatrix(
new float[][]
{
new float[]{.3f, .3f, .3f, 0, 0},
new float[]{.59f, .59f, .59f, 0, 0},
new float[]{.11f, .11f, .11f, 0, 0},
new float[]{0, 0, 0, 1, 0},
new float[]{0, 0, 0, 0, 1}
});
ImageAttributes attributes =new ImageAttributes();
attributes.SetColorMatrix(colorMatrix);
g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
g.Dispose();
return newBitmap;
}
موفق باشید.
از کمکتون ممنون ولی متوجه نشدم این قسمتها چین؟(قرمزها)
private void btnStatePower_Click_1(object sender, EventArgs e)//a
{
Bitmap b = new Bitmap(picMain.Image, picMain.Size);//b
Image img = GrayScale_Maker(b);//c
picRes.Image = img;//d
}
دو تا picture box ها هستند (picmain کنترل پیکچرباکسی است که عکس اصلی درون اونه و picrec کنترل پیکچر باکسی است که عکس پس از سیاه و سفید شدن درون آن قرار میگیرد)
خیلی لطف کردی ولی منظورم دوتا عکس جدا نبود منظورم یه چیزی مثل منوی های که تعقیر میکنه بود مثل Win8
اون متد public Bitmap GrayScale_Maker(Bitmap bmp)//a که نوشتم وظیفه ی سیاه و سفید کردن عکس رو داره گفتم که اگه دوست داشتید به جای رویداد کلیک باتن از رویداد mouseEter عکس استفاده کنی . از دو تا picturebox هم استفاده نکن میتونی نتیجه سیاه و سفید شدن رو روی همان عکس اعمال کنی . در هر حال کار سیاه و سفید شدن عکس بوسیله ی متد public Bitmap GrayScale_Maker(Bitmap bmp)//a صورت میگیرد. شرمنده من تا به حال با محیط ویندوز8 سروکار نداشتم.
شیوه ControlPaint.DrawImageDisabled شاید دقیقا به مفهوم سیاه و سفید کردن نباشد اما حداقل سرعت پردازش اش بالا است.
به مثال پیوستی مراجعه شود :
HoverImage.zip
همچنین رجوع شود به :
نحوه ی درج عکس در باتن بدون حاشبه
از scanline استفاده کن اونجوری با for ارزشی نداره یا روش ماتریس دوست عزیز M.safa