4

我正在开发一个 .NET C# 项目,并希望在单击图片框时获取像素值,我该如何实现?

基本思想是,当我单击图片框中的任意位置时,我会得到该图像点的像素值。

谢谢!

4

3 回答 3

4

正如@Hans 指出的那样Bitmap.GetPixel,除非你有不同SizeModePictureBoxSizeMode.Normal or PictureBoxSizeMode.AutoSize. 为了让它一直工作,让我们访问PictureBoxnamed的私有属性ImageRectangle

PropertyInfo imageRectangleProperty = typeof(PictureBox).GetProperty("ImageRectangle", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance);

private void pictureBox1_Click(object sender, EventArgs e)
{
    if (pictureBox1.Image != null)
    {
        MouseEventArgs me = (MouseEventArgs)e;

        Bitmap original = (Bitmap)pictureBox1.Image;

        Color? color = null;
        switch (pictureBox1.SizeMode)
        {
            case PictureBoxSizeMode.Normal:
            case PictureBoxSizeMode.AutoSize:
                {
                    color = original.GetPixel(me.X, me.Y);
                    break;
                }
            case PictureBoxSizeMode.CenterImage:
            case PictureBoxSizeMode.StretchImage:
            case PictureBoxSizeMode.Zoom:
                {
                    Rectangle rectangle = (Rectangle)imageRectangleProperty.GetValue(pictureBox1, null);
                    if (rectangle.Contains(me.Location))
                    {
                        using (Bitmap copy = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height))
                        {
                            using (Graphics g = Graphics.FromImage(copy))
                            {
                                g.DrawImage(pictureBox1.Image, rectangle);

                                color = copy.GetPixel(me.X, me.Y);
                            }
                        }
                    }
                    break;
                }
        }

        if (!color.HasValue)
        {
            //User clicked somewhere there is no image
        }
        else
        { 
            //use color.Value
        }
    }
}

希望这可以帮助

于 2013-08-19T07:03:52.060 回答
3

用这个:

private void pictureBox2_MouseUp(object sender, MouseEventArgs e)
{
    Bitmap b = new Bitmap(pictureBox1.Image);
    Color color = b.GetPixel(e.X, e.Y);
}
于 2013-08-13T14:41:20.657 回答
1

除非该图片框的大小为像素大小,否则我认为您不能。控制 onclick 事件不会保存特定的点击位置。如果您在谈论颜色,则在 c# 中是不可能的

于 2013-08-13T13:46:38.213 回答