[英]Converting Pixels from int to unsigned byte in JAVA
我試圖將我從黑白圖像的getRGB函數獲得的像素轉換為無符號字節,我已閱讀,並且如果我錯了,請更正,java中的getRGB函數返回整數值,所以我要做的是看到0-255之間的值,而不是該函數得到的負整數Im。 我沒有成功嘗試過:
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;
}
}
請注意,x射線是有緩沖的圖像。 希望您能幫我解決這個問題。 如您所見,我嘗試使用mask,也嘗試將強制轉換后的值加128。
好吧, 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之間的值,那么或多或少都可以使用相同的技巧來使它變為無符號。 實際上,可以使用與上述完全相同的代碼行,但是您也可以縮短掩碼:
matrix[i][j] = xray.getRGB(j,i) & 0xFF;
這意味着您不需要任何if
-代碼中的else
也可以使它正常工作,並且您不需要extract
或asign
變量。
嘗試這個
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.