2014-10-30 34 views
0

Im試圖將我從黑白圖像的getRGB函數獲得的像素轉換爲無符號字節,如果我錯了,我已經讀取並更正了getRGB函數java返回整數值,所以我想要做的是看到0-255的值而不是負數的整數值。我試過這個沒有成功:在JAVA中將像素從int轉換爲無符號字節

int width; 
    int height; 
    byte extract; 
    int asign; 
    int matrix[][]; 

for (i = 0; i < height; i++) 
    { 
     for (j = 0; j < width; j++) 
     { 
      extract =(byte)(xray.getRGB(j, i)); 
      asign = (int)extract; 
      //asign = asign & 0xff; 
      asign = asign + 128; 
      matrix[i][j] = asign; 


     } 
    } 

請注意,xray是一個延遲圖像。 希望你能幫助我解決這個問題。正如你所看到的,我已經嘗試過使用蒙版,我也嘗試在演員投入後將值添加到128。

回答

0

那麼,getRGB()返回一個有符號的int,但它是一個32位int代表alpha和R,G,B值。最重要的字節是alpha,如果它是完全不透明的,那麼這將是255,這意味着你最終總體上會產生負面的int

如果你想掩蓋了alpha值,你可以用

matrix[i][j] = xray.getRGB(j,i) & 0xFFFFFF; 

這將擺脫高位字節的做到這一點。這將爲您留下一個包含像素RGB值的正值。

小心以後用它做了什麼:如果以後嘗試使用它來設置像素的顏色,最終可能會將alpha值設置爲0(現在已將其遮蓋),並且所以你最終會得到完全透明的東西(又名不可見)。

如果是黑白圖像,並且出於某種原因,您只能獲得-128至127的值,則可以使用或多或少相同的技巧使其無符號。事實上正是因爲上述相同的線將做到這一點,但你也可以縮短面膜:

這意味着你不需要任何if - else在你的代碼得到它的工作,而你不知道t需要你的變量extractasign

+0

謝謝,我還有一個問題,如果,即時通訊使用它的形象,這是一個黑白圖像,它supossed包含一個矩陣,該矩陣中的所有值都介於0到255之間,對嗎?我的問題是,如果內部計算機仍然看到4個通道(阿爾法,紅色,綠色,藍色)或只看到一個通道,換句話說,像素由4個值組成,或者只有一個? – 2014-10-30 17:05:08

+0

@LaloGalicia它可能被*存儲*任何方式。最終,它將需要轉換爲整個屏幕的像素數據,但是,這將是RGB。現在,很多繁重的工作都是由顯卡來完成的,CPU不必擔心。所以這取決於你的意思*內部*:有很多不同的層次! – 2014-11-03 06:13:42

+0

謝謝@ chiastic-security,我會嘗試你告訴我的,並讓你知道我的結果:D – 2014-11-05 04:24:18

0

試試這個

extract =(byte)(xray.getRGB(j, i)); 
    if(extract < 0){ 
     asign = extract + 256; // Add the total number of values in byte if extract is negative 
    } 
    else{ 
     asign = extract;  // You don't need to type cast it to int explicitly 
    } 
    matrix[i][j] = asign; 
+0

謝謝,我會盡力的。我還有一個問題,如果我使用它的圖像,它是一個黑白圖像,它包含一個矩陣,並且該矩陣中的所有值必須介於0到255之間,對嗎?我的問題是,如果內部計算機仍然看到4個通道(阿爾法,紅色,綠色,藍色)或只看到一個通道,換句話說,像素由4個值組成,或者只有一個? – 2014-10-30 17:06:29