RGB цвета в Java против VB.net

Я не являюсь носителем английского языка, поэтому прошу прощения за любые ошибки перевода.

У меня нет проблем с кодированием. Это скорее концептуальный вопрос.

Я написал два раза один и тот же кусок кода, переводя изображение в список значений RGB. (1 комбинация из 3 значений для каждого пикселя).

Сначала я написал код на 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), которое было фотографией (таким образом, полный спектр цветов). К своему удивлению я увидел там, где небольшие различия в значениях RGB между кодами VB.net и Java.

Если я сравниваю java(красный) с VB.net(красный), java(зеленый) с VB.net(зеленый) и java(синий) с VB. Чистый (синий) Я сравниваю 270x320x3 = 259,2 тыс. комбинаций. Различия между целыми числами, полученными из VB.net и из кода Java, заключаются в следующем:

  • Без разницы: 250178 (96,5%)
  • Одно отличие: 7426 (2,9%)
  • Две разницы: 1582 (0,6%)
  • Три различия: 14 (0,0%)
  • Четыре или более различий: 0 (0,0%)

Кто-нибудь может объяснить мне, откуда эта разница? Это связано со способом считывания цветов, способом буферизации изображения или с чем-то вроде сглаживания?

Действительно любопытно, в чем причина, спасибо заранее

1 ответ

Решение

Как уже упоминалось, разница вызвана сжатием с потерями в формате JPEG.

Вы должны тестировать эти методы в формате без потерь.

Другие вопросы по тегам