簡體   English   中英

在JAVA中將像素從int轉換為無符號字節

[英]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也可以使它正常工作,並且您不需要extractasign變量。

嘗試這個

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM