java 与 VB.net 中的 RGB 颜色

RGB colors in java Vs VB.net

我的母语不是英语,所以请原谅任何翻译错误。

我真的没有编码问题。这更像是一个概念性问题。

我将同一段代码写了两次,将图像转换为 RGB 值列表。 (每个像素 3 个值的 1 个组合)。

我首先在 VB.net 中使用以下代码编写了代码:

Dim bmp As New Bitmap(File)
For x As Integer = 0 To w - 1 
    For y As Integer = 0 To h - 1
        Dim c As Color = bmp.GetPixel(x, y)
        Dim Red as integer = c.R
        Dim Green as integer = c.G
        Dim Blue as integer = c.B
    Next y
next x

之后我在Java中写了以下内容:

BufferedImage image = ImageIO.read(new File(File))
for (int i = 0; i < w; i++) {
    for (int j = 0; j < h; j++) {
        int pixel = image.getRGB(i,j);
        int Red = ((pixel >> 16) & 0xff);
        int Green = ((pixel >> 8) & 0xff);
        int Blue = ((pixel) & 0xff);
    }
}

我的期望是从两段代码中获得相同的值,因为它们使用相同的图像。我在一张图像 (270x320) 上尝试了它,它是一张照片(所以是全光谱)。令我惊讶的是,我看到 VB.net 和 Java 代码之间的 RGB 值存在细微差异。

如果我比较 java(红色)与 VB.net(红色),则 java(绿色)与 VB.net (绿色)和 java(蓝色)与 VB.net(蓝色)我比较 270x320x3 = 259.2k 组合。 VB.net和Java代码得到的整数的区别如下:

任何人都可以向我解释这种差异从何而来?与读取颜色的方式、缓冲图像的方式或抗锯齿之类的方式有关吗?

很好奇是什么原因,提前谢谢

正如其他人所提到的,差异是由 JPEG 的有损压缩造成的。

您应该使用无损格式测试这些方法。