如何从图片框中获取特定像素的颜色
本文关键字:像素 颜色 获取 | 更新日期: 2023-09-27 18:09:41
我的一个程序中有一个图片框,可以很好地显示我的图像。显示的内容包括选定的"背景色"和一些使用画笔的填充矩形和一些使用笔的线条。我没有导入的图像。我需要检索图片框上指定像素的颜色值。我尝试了以下方法:
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);
}
}
但是,如果您真的不想分配图像,则可以使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);
}