2

我有一个 ushort 列表pixels16,其中包含来自 16 位灰度图像的像素数据。然后,我有一个显示图像的图片框和一个功能,用户可以在其中单击图片框中的任何位置,系统将返回该位置的像素值(见下面的代码)

这是返回给定位置的像素值的代码:在我看来,我正在显示用户在图像中某个位置单击的确切像素的值,对吗?

我的逻辑是,如果图像是 512x512,那么我可以先Y找到位置,然后通过X并获取该点的像素值,如下所示:int pixelposition = (512 * (y-1)) + x;

我在正确的方向吗?

        for (int y = 0; y < picbox_mpr.Width; y++)
        {
            if (e.Y == y)
            {
                for (int x = 0; x < picbox_mpr.Height; x++)
                {
                    if (e.X == x)
                    {
                        int pixelposition = (512 * (y-1)) + x;
                        string a= pixels16[pixelposition].ToString();
                        MessageBox.Show(a);
                    }
                }
            }
        }
4

1 回答 1

1
for (int y = 0; y < picbox_mpr.Width; y++)
     {
         if (e.Y == y)
         {
             for (int x = 0; x < picbox_mpr.Height; x++)
             {
                 if (e.X == x)
                 {

啊,是的,For-if模式。

这应该简单地变成

int pixelposition = (512 * (e.Y-1)) + e.X;
string a= pixels16[pixelposition].ToString();
MessageBox.Show(a);

没有循环。

您应该知道 eX 和 eY 是基于鼠标在屏幕上相对于控件顶部的位置,而不是相对于图像。由于边距,它在某些模式下会有点错误,但如果它被滚动或缩放或居中,那将是非常错误的。您应该查看此示例代码以了解如何转换为图像坐标。

于 2013-08-19T17:21:20.327 回答