繁体   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