【问题标题】:RGB colors in java Vs VB.netjava Vs VB.net中的RGB颜色
【发布时间】:2017-09-05 04:35:57
【问题描述】:

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

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

我编写了两次将图像转换为 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(red) 与 VB.net(red),java(green) 与 VB.net(green) 以及 java(blue) 与VB.net(蓝色)的我比较 270x320x3 = 259.2k 组合。从VB.net和Java代码得到的整数的区别如下:

  • 无差异:250178 (96.5%)
  • 一个差异:7426 (2.9%)
  • 两差:1582(0.6%)
  • 三差:14 (0.0%)
  • 四个或更多差异:0 (0.0%)

谁能向我解释这种差异来自哪里?它与读取颜色的方式,缓冲图像的方式或抗锯齿之类的方式有关吗?

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

【问题讨论】:

  • 可能是告诉图像处理库稍微改变颜色的图像元数据。可能是一个图书馆尊重元数据而其他图书馆忽略它。此类元数据的示例包括 ICC 颜色配置文件、伽马校正值等。
  • 文件扩展名是什么?
  • 我试过 Jpeg 与 Jpeg 以及 Jpeg 与 Png
  • @Bert-JanStroop 尝试使用 bmp 文件排除可能的图像算法差异。

标签: java vb.net colors rgb rgbcolor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2012-07-22
    • 2017-09-11
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多