我的一个程序中有一个图片框,可以很好地显示我的图像。显示的内容包括一个选定的“BackColor”以及一些使用画笔填充的矩形和一些使用笔绘制的线。我没有导入的图像。我需要检索图片框上指定像素的颜色值。我尝试了以下方法:

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,以便在某个地方使用它,这意味着如果您想使用它的可能性,例如其PictureBox
简单地绘制背景是不一样的。这是获得真实位图的最少代码:
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);
   }
}
但是,如果您确实不想分配图像,则可以使Bitmap将其自身绘制到真实的Paint上。请注意,您必须Paint事件中绘制矩形等,才能正常工作! (实际上,出于其他原因,您也必须使用ojit_code事件!)
现在,您可以通过以下任一方式进行测试:用标签和鼠标:
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);
}

关于c# - 如何从图片框中获取特定像素的颜色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24354354/

10-10 09:05