PDA

View Full Version : کمک در مورد تعقیر رنگ image به سیاه و سفید



mohammad.ardeshiri
دوشنبه 16 مرداد 1391, 03:39 صبح
سلام
کسی میتونه کمکم کنه که وقتی با موس میرم رو image تعقیر حالت بده مثلا سیاه سفید شه یا ....
ممنونم

harani
دوشنبه 16 مرداد 1391, 11:40 صبح
خدمت شما :


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 استفاده کن .

90861

fjm11100
دوشنبه 16 مرداد 1391, 12:11 عصر
کافیه معدل مجموع 3 رنگ (آبی قرمز سبز)پیکسلها را بگیری و بجای رنگ اصلی ست کنی. ضمنا در هنگام زدن تاپیک فارسی را هم درست پاس بدارید. تغییر رنگ درسته

مهرداد صفا
دوشنبه 16 مرداد 1391, 13:41 عصر
سلام
کسی میتونه کمکم کنه که وقتی با موس میرم رو image تعقیر حالت بده مثلا سیاه سفید شه یا ....
ممنونم
سلام
از این متود هم میتونید برای سیاه سفید کردن استفاده کنید:


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;
}

موفق باشید.

mohammad.ardeshiri
دوشنبه 16 مرداد 1391, 14:39 عصر
از کمکتون ممنون ولی متوجه نشدم این قسمتها چین؟(قرمزها)
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
}

harani
دوشنبه 16 مرداد 1391, 16:36 عصر
دو تا picture box ها هستند (picmain کنترل پیکچرباکسی است که عکس اصلی درون اونه و picrec کنترل پیکچر باکسی است که عکس پس از سیاه و سفید شدن درون آن قرار میگیرد)

mohammad.ardeshiri
سه شنبه 17 مرداد 1391, 02:42 صبح
خیلی لطف کردی ولی منظورم دوتا عکس جدا نبود منظورم یه چیزی مثل منوی های که تعقیر میکنه بود مثل Win8

harani
سه شنبه 17 مرداد 1391, 03:57 صبح
اون متد public Bitmap GrayScale_Maker(Bitmap bmp)//a که نوشتم وظیفه ی سیاه و سفید کردن عکس رو داره گفتم که اگه دوست داشتید به جای رویداد کلیک باتن از رویداد mouseEter عکس استفاده کنی . از دو تا picturebox هم استفاده نکن میتونی نتیجه سیاه و سفید شدن رو روی همان عکس اعمال کنی . در هر حال کار سیاه و سفید شدن عکس بوسیله ی متد public Bitmap GrayScale_Maker(Bitmap bmp)//a صورت میگیرد. شرمنده من تا به حال با محیط ویندوز8 سروکار نداشتم.

the king
سه شنبه 17 مرداد 1391, 04:27 صبح
شیوه ControlPaint.DrawImageDisabled شاید دقیقا به مفهوم سیاه و سفید کردن نباشد اما حداقل سرعت پردازش اش بالا است.

به مثال پیوستی مراجعه شود :

90892

همچنین رجوع شود به :
نحوه ی درج عکس در باتن بدون حاشبه (http://barnamenevis.org/showthread.php?353375)

yashar666
یک شنبه 13 اسفند 1391, 14:30 عصر
از scanline استفاده کن اونجوری با for ارزشی نداره یا روش ماتریس دوست عزیز M.safa