当前位置: 代码迷 >> java >> 字节值的平均值
  详细解决方案

字节值的平均值

热度:67   发布时间:2023-07-16 17:34:48.0

我正在尝试创建图像的(平均)灰度,但似乎没有获得每个像素的值。 我认为总结平均值时并没有进行正确的计算,但是我找不到错误所在。

public byte[] changePixelValues(byte blue, byte green, byte red) {
            //Convert to greyscale by average
            byte avg;
            int sum = 0;
            sum +=blue;
            sum += green;
            sum += red;
            avg = (byte) (sum / 3);

            //System.out.println("avg: " +  avg);
            byte[] values = new byte[3];

            values[0] = avg;
            values[1] = avg;
            values[2] = avg;

            return values;

我在类型转换中错过了什么吗?

编辑:

输入是以下内容,其中byte []数据是BufferedImage的原始数据,在这种情况下,该图像没有alphaRaster。

for (int i = 0; i < data.length; i += 3) {
      byte [] newData = changer.changePixelValues(data[i], data[i+1], data[i+2]);
      System.arraycopy(newData,0,data,i,3);
}

首先,如果要将图像转换为灰度,则方法应仅返回一个字节值,而不返回字节数组。 如果返回一个字节,则可以将该值分配给每个RGB通道,然后获得灰度图像或将该值设置为8位图像。

您需要记住,java中的字节是带符号的(范围-128至127),因此,例如,如果您具有等于200的R通道值(通道值可以在0到255范围内)并将其强制转换为字节,则值为等于-56。 因此,如果您计算平均值(假设G = B = 100),则平均值等于48(应为133)。

  相关解决方案