View Full Version : دسترسی به پیکسل های یک عکس
hamed_f65
شنبه 27 تیر 1388, 13:10 عصر
سلام
فرض کنید یک فرم خالی داریم که داخلش یک picturebox قرار داره و یک button
وقتی برنامه اجرا میشه یه عکسی از توی هارد داخل picturebox لود میشه
حالا من میخوام مثلا نقطه ی (100و200) عکس رو مشکی رنگ کنم
مورد اول اینکه :میشه بفرمائید چطوری این کارو انجام بدم؟
مورد دوم اینکه : چطوری میشه بفهمم مثلا نقطه (100و300) عکسم چه رنگی هستش
اگه لطف کنید و کد هر قسمت رو بنویسید ممنون میشم
hozouri
شنبه 27 تیر 1388, 13:28 عصر
OpenFileDialog o = new OpenFileDialog();
if (o.ShowDialog() == DialogResult.OK)
{
Bitmap p = new Bitmap(o.FileName);
p.SetPixel(200, 100, Color.FromArgb(100, 100, 100));
Color color = p.GetPixel(300, 100);
}
hamed_f65
شنبه 27 تیر 1388, 13:37 عصر
OpenFileDialog o = new OpenFileDialog();
if (o.ShowDialog() == DialogResult.OK)
{
Bitmap p = new Bitmap(o.FileName);
p.SetPixel(200, 100, Color.FromArgb(100, 100, 100));
Color color = p.GetPixel(300, 100);
}
حالا چظوری می تونم بفهمم color چه محتویاتی داره ؟
منظورم اینه که چطوری کد رنگش رو استخراج کنم که قابل نمایش باشه
mohkami
شنبه 27 تیر 1388, 13:47 عصر
سلام،
میتونی برای تست از یک panel استفاده کنی و :
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
panel1.BackColor = ((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y);
}
hozouri
شنبه 27 تیر 1388, 14:08 عصر
color.A;
color.B;
color.G;
color.R;
hamed_f65
شنبه 27 تیر 1388, 19:58 عصر
سلام،
میتونی برای تست از یک panel استفاده کنی و :
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
panel1.BackColor = ((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y);
}
میشه یه مقدار توضیح بدید
متوجه نمیشم این کد چیکار میکنه
mohkami
شنبه 27 تیر 1388, 21:00 عصر
سلام،
بله
ببین شما یه Panel به فرمت اضافه میکنی که اسمش میشه panel1
Event زیر برای حرکت Mouse روی Picturebox هست
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
کد زیر عکس(Image) موجود در PictureBox رو به Bitmap تبدیل میکنه و با GetPixel رنگ پیکسلی رو برمیگردونه که Mouse روی اون هست(e.X,e.Y)
((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y)
و در آخر BackColor اون Panel رو همین رنگ قرار میدید.
panel1.BackColor = ((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y);
hamed_f65
شنبه 27 تیر 1388, 21:19 عصر
سلام،
بله
ببین شما یه Panel به فرمت اضافه میکنی که اسمش میشه panel1
Event زیر برای حرکت Mouse روی Picturebox هست
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)کد زیر عکس(Image) موجود در PictureBox رو به Bitmap تبدیل میکنه و با GetPixel رنگ پیکسلی رو برمیگردونه که Mouse روی اون هست(e.X,e.Y)
((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y)و در آخر BackColor اون Panel رو همین رنگ قرار میدید.
panel1.BackColor = ((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y);
فقط قسمت آخرش رو مشکل داشتم دوست عزیز که حل شد
البته یه ارور هم می داد که مربوط میشد به سایز پنل و عکس که می بایستی با هم مساوی باشن
mohkami
شنبه 27 تیر 1388, 21:37 عصر
حامد آقای گل قبل از اینکه عکسی توی PictureBox بذاری اگه Mouse رو ببری روش Error میده چون خالیه.
سایز Panel و PictureBox به هم ربطی ندارند.عکس زیر رو نگاه کن متوجه میشی:
33492
:لبخندساده:
hamed_f65
یک شنبه 28 تیر 1388, 15:00 عصر
ممنون
چند تا سوال واسه من پیش اومده که امیدوارم دوستان باز هم لطف کنن و مشکل رو حل کنن :
1 : این color.a چه چیزی رو مشخص میکنه ؟
2 : با توجه به عکس ضمیمه من می خوام وقتی ماوس روی picturebox رفت مقدار R,B,G,A استخراج بشه و توی هر کدوم از textbox های مربوطه قرار بگیره . با چه دستوری این کار رو انجام بدم ؟
3 : اگر بخوام برنامه طوری طراحی بشه که بتونه رنگ های مشکی و نزدیک به مشکی یا سفید و نزدیک به سفید رو تشخیص بده باید چکار کنم . منظورم اینه که فرض کنید می خوام وقتی ماوس روی یه رنگ مشکی یا خیلی نزدیک به مشکی رفت مثلا تایمر من شروع به کار کنه . با چه دستوری باید این کار رو انجام داد ؟
4 : در آخر اگر اطلاعاتی در رابطه با ترکیب 3 تا رنگ یا مقادیر R,G,B دارید بفرمائید
ممنون از همه دوستان
mohkami
یک شنبه 28 تیر 1388, 15:44 عصر
سلام مجدد،
A مقدار Transparency رو نشون میده که اندازش بین 0 و 255 هست،
Transparent برار با 0
کامل 255
بقیه سوالاتت رو روی کد توضیح دادم:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
int a,b,r,g;
//A rang ro migire va tuye a gharar mide
//stringesh ro mizarim tuye text boxe A
a=((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y).A;
txtA.Text = a.ToString();
b=((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y).B;
txtB.Text = b.ToString();
r=((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y).R;
txtR.Text = r.ToString();
g=((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y).G;
txtG.Text = g.ToString();
//be nazaram baraye inke chek koni rangesh
//nazdik be meshki hast in 3 halat ro bayad check koni
//va man goftam age nazdik be meshki bud un pixel ro sefid kone
if (b < 100 && r < 100 && g < 100)
{
Bitmap p = (Bitmap)pictureBox1.Image;
p.SetPixel(e.X, e.Y, Color.White);
pictureBox1.Image = (Image)p;
}
}
در مورد سوال آخرتون هم باید بگم روی عکس mouse رو ببر و مقدار RGB ببین چطور تغییر میکنه تا ببینی ترکیبش چجوری میشه.
33542
hamed_f65
سه شنبه 30 تیر 1388, 11:04 صبح
حامد آقای گل قبل از اینکه عکسی توی PictureBox بذاری اگه Mouse رو ببری روش Error میده چون خالیه.
سایز Panel و PictureBox به هم ربطی ندارند.عکس زیر رو نگاه کن متوجه میشی:
33492
:لبخندساده:
دقیقا منظور بنده هم همین بود منتها بد بیان کردم
چون تصویری که توی picturebox قرار دادم کاملا فیت نشده بود ارور میداد
ممنون
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.