我有一个ushort列表pixels16
,它包含16位灰度图像的pixeldata。
然后,我有一个显示图像的功能框和一个用户可以点击图片框中任意位置的功能,系统将返回该位置的像素值(参见下面的代码)
这是返回给定位置像素值的代码:在我看来,我正在显示用户在图像中某个位置点击的确切像素的值,我是对的吗?
我的逻辑是,如果图像是512x512,那么我可以先找Y
然后找到该点后,转到X
并获取该点的像素值,如下所示:{ {1}}
我是朝着正确的方向吗?
int pixelposition = (512 * (y-1)) + x;
答案 0 :(得分: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);
没有循环。
您应该知道e.X和e.Y是基于鼠标在屏幕上相对于控件顶部的位置,而不是相对于图像。由于边距,它在某些模式下会有点不对,但如果它滚动或缩放或居中,那将是非常错误的。您应该查看this example code以了解如何转换为图像坐标。