java Vs VB.net中的RGB颜色

时间:2017-04-10 08:15:18

标签: java vb.net colors rgb rgbcolor

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

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

我写了两次相同的代码,将图像转换为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代码获得的整数之间的差异如下:

  • 没有区别:250178(96.5%)
  • 一个区别:7426(2.9%)
  • 两个不同:1582(0.6%)
  • 三个差异:14(0.0%)
  • 四个或更多差异:0(0.0%)

有人可以向我解释这种差异来自哪里?是否与阅读颜色的方式,缓冲图像的方式或反锯齿等方法有关?

真的很好奇是什么原因,提前thx

1 个答案:

答案 0 :(得分:1)

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

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