我试图将我从黑白图像的getRGB函数获得的像素转换为无符号字节,我已阅读并更正,如果我错了,java中的getRGB函数返回整数值,那么我想要什么要做的是看到0-255的值不是我得到的函数的负整数值。我没有成功地试过这个:
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 :(得分: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的值,那么或多或少同样的技巧适用于使它无符号。实际上与上面的行完全相同,但你也可以缩短掩码:
matrix[i][j] = xray.getRGB(j,i) & 0xFF;
这意味着您的代码中不需要任何if
- else
即可使其正常运行,并且您不需要extract
或asign
个变量。
答案 1 :(得分: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;