2013-08-19 130 views
2

我有一個ushort list pixels16它包含16位灰度圖像中的pixeldata。 然後,我有一個pcturecture顯示圖像和一個功能,用戶可以點擊圖片框中的任何地方,系統將返回該位置的像素值(請參閱下面的代碼)獲得像素值灰度圖像16位.net

這是返回給定位置的像素值:在我看來,我正在顯示用戶在圖像中某個位置點擊的確切像素的值,對嗎?

我的邏輯是,如果圖像是512×512,然後我可以先去通過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); 
        } 
       } 
      } 
     } 
+0

爲什麼不將數據加載到512x512 ushort數組中? – Random832

+0

pixels16是一個包含像素數據的ushort數組.. – Matimont

回答

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以瞭解如何轉換爲圖像座標。

+0

它像一個沒有For的魅力一樣工作! 現在,當我點擊圖片框時,我在黑色區域獲得了65536個,應該不是0? – Matimont

+0

@Matimont我不知道你的圖片是什麼,你如何加載它(包括你如何把它放在圖片框中),或者你是否已經處理了我提到的座標問題。然而,對於一個ushort而言,65536是不可能的,它被限制在0..65535之間。 – Random832

+0

我的意思是說65535 ... – Matimont