【发布时间】: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