java - 字节值的平均值

标签 java types casting bgr

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

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 channel ,然后获得灰度图像或将该值设置为 8 位图像。

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

关于java - 字节值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625608/

相关文章:

Java 通用函数 : Define a set of classes generic object must be

java - 如何创建只接受实现 Iterable 的元素的方法

javascript - Null 究竟是什么?

c# - 如何创建实现少量接口(interface)(或接口(interface)子集)的类型变量?

c - 如何将 char 指针转换为 int 指针?

java - 无法获取 Runtime.getRuntime().exec(python script) 的输出;

java - react 堆项目 : How to control Flux emission

java - 使用 tc 服务器设置 kerberos 的问题

python - 在 Python/Eclipse 中将对象的注释键入正确的类

快速使用 AnyClass 对象与 as?