[英]How do I get the color of a specific pixel from a picture box?
我的一個程序中有一個圖片框,可以很好地顯示我的圖像。 顯示的內容包括選定的“背景色”和一些使用畫筆填充的矩形和一些使用鋼筆填充的線條。 我沒有導入的圖像。 我需要檢索圖片框上指定像素的顏色值。 我嘗試了以下方法:
Bitmap b = new Bitmap(pictureBox1.Image);
Color colour = b.GetPixel(X,Y)
但是pictureBox1.Image
總是返回null
。 .Image
僅適用於導入的圖像嗎? 如果不是,我怎樣才能讓它發揮作用? 有沒有其他選擇?
是的,你可以,但你應該嗎?
這是您的代碼需要的更改:
Bitmap b = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(b, pictureBox1.ClientRectangle);
Color colour = b.GetPixel(X, Y);
b.Dispose();
但是如果你想用它做真正的工作,真的沒有辦法給PictureBox
一個真正的Image
來處理它,這意味着如果你想使用它的可能性,例如它的SizeMode
。
簡單地繪制它的背景是不一樣的。 這是獲得分配的真實位圖的最小代碼:
public Form1()
{
InitializeComponent();
pictureBox1.Image = new Bitmap(pictureBox1.ClientSize.Width,
pictureBox1.ClientSize.Height);
using (Graphics graphics = Graphics.FromImage(pictureBox1.Image))
{
graphics.FillRectangle(Brushes.CadetBlue, 0, 0, 99, 99);
graphics.FillRectangle(Brushes.Beige, 66, 55, 66, 66);
graphics.FillRectangle(Brushes.Orange, 33, 44, 55, 66);
}
}
但是,如果您真的不想分配 Image ,則可以讓PictureBox
將自己繪制到真正的Bitmap
。 請注意,您必須在Paint
事件中繪制矩形等才能使其工作! (實際上,您也必須出於其他原因使用Paint
事件!)
現在您可以使用任何一種方式進行測試,例如使用標簽和鼠標:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (pictureBox1.Image != null)
{ // the 'real thing':
Bitmap bmp = new Bitmap(pictureBox1.Image);
Color colour = bmp.GetPixel(e.X, e.Y);
label1.Text = colour.ToString();
bmp.Dispose();
}
else
{ // just the background:
Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
Color colour = bmp.GetPixel(e.X, e.Y);
label1.Text += "ARGB :" + colour.ToString();
bmp.Dispose();
}
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.DarkCyan, 0, 0, 99, 99);
e.Graphics.FillRectangle(Brushes.DarkKhaki, 66, 55, 66, 66);
e.Graphics.FillRectangle(Brushes.Wheat, 33, 44, 55, 66);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.