【问题标题】:Converting Pixels from int to unsigned byte in JAVA在JAVA中将像素从int转换为无符号字节
【发布时间】:2014-12-26 18:19:14
【问题描述】:

我正在尝试将从黑白图像的 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 添加到值中。

【问题讨论】:

    标签: java int byte pixels unsigned


    【解决方案1】:

    好吧,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 变量。

    【讨论】:

    • 谢谢,我还有一个问题,如果我使用它的图像是黑白图像,它应该包含一个矩阵,并且这个矩阵中的所有值都必须在 0 到255,对吗?我的问题是,如果计算机内部仍然可以看到 4 个通道(阿尔法、红色、绿色、蓝色)或者只看到一个通道,换句话说,像素是由 4 个值组成的,还是只有一个???
    • @LaloGalicia 无论哪种方式都可能存储。不过,最终需要将其转换为整个屏幕的像素数据,即 RGB。这些天来,很多繁重的工作都由显卡完成,CPU 再也不用担心它了。所以这取决于你所说的internally是什么意思:有很多不同的层!
    • 谢谢@chiastic-security,我会试试你告诉我的,让你知道我的结果:D
    【解决方案2】:

    试试这个

        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;
    

    【讨论】:

    • 谢谢,我会试试的。我还有一个问题,如果我使用它的图像是黑白图像,它应该包含一个矩阵,并且这个矩阵中的所有值都必须在 0 到 255 之间,对吗?我的问题是,如果计算机内部仍然可以看到 4 个通道(阿尔法、红色、绿色、蓝色)或者只看到一个通道,换句话说,像素是由 4 个值组成的,还是只有一个???
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 2012-03-23
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多