2

pixels1616ビットのグレースケール画像からのピクセルデータで構成されるushortリストがあります。次に、画像を表示するピクチャーボックスと、ユーザーがピクチャーボックス内の任意の場所をクリックできる関数があり、システムはその位置のピクセル値を返します (コードの下を参照)。

これは、指定された位置のピクセル値を返すコードです。私の考えでは、ユーザーが画像内の位置でクリックした正確なピクセルの値を表示していますが、正しいですか?

私の論理は、画像が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 に答える