[英]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.