Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中像素从int到无符号字节的转换_Java_Int_Byte_Pixels_Unsigned - Fatal编程技术网

JAVA中像素从int到无符号字节的转换

JAVA中像素从int到无符号字节的转换,java,int,byte,pixels,unsigned,Java,Int,Byte,Pixels,Unsigned,我正在尝试将黑白图像的getRGB函数得到的像素转换为无符号字节,我已经读过了,如果我错了,纠正一下,java中的getRGB函数返回整数值,所以我想做的是看到0-255之间的值,而不是我用函数得到的负整数值。我尝试过这个,但没有成功: int width; int height; byte extract; int asign; int matrix[][]; for ( i = 0; i < height; i++) { fo

我正在尝试将黑白图像的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;


        }
     }
int宽度;
内部高度;
字节提取;
国际合作;
int矩阵[];
对于(i=0;i
请注意,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;
extract=(字节)(xray.getRGB(j,i));
如果(提取<0){
asign=extract+256;//如果extract为负数,则以字节为单位添加值的总数
}
否则{
asign=extract;//不需要显式地将其类型转换为int
}
矩阵[i][j]=asign;

谢谢,我还有一个问题,如果我正在处理的图像是黑白图像,那么它应该包含一个矩阵,并且该矩阵中的所有值必须介于0到255之间,对吗?我在这里的问题是,如果计算机内部仍然看到4个通道(阿尔法、红色、绿色、蓝色),或者只看到一个通道,换句话说,像素由4个值组成,或者只有一个???@LaloGalicia,它可能以任何方式存储。不过,最终需要将其转换为整个屏幕的像素数据,即RGB。现在,很多繁重的工作都是由图形卡完成的,CPU永远不用担心它。所以这取决于你所说的内部:有很多不同的层!谢谢@chiatic security,我会按照你告诉我的去做,并让你知道我的结果:谢谢,我会努力的。我还有一个问题,如果我处理的图像是黑白图像,它应该包含一个矩阵,这个矩阵中的所有值都必须在0到255之间,对吗?我在这里的问题是,如果计算机内部仍然看到4个通道(阿尔法、红色、绿色、蓝色),或者只看到一个通道,换句话说,像素是由4个值组成的,还是只有一个???