LINUX.ORG.RU

Похоже на баг при доступе к пикселам: FreeImage_GetBits()[0]


0

1

Вот такая простая программка:

#include <FreeImage.h>
#include <stdio.h>

int main(int argc, char **argv) {
  if (argc < 2) return -1;
  const char *filename_i = argv[1];
  FreeImage_Initialise(1);
  FIBITMAP *dib0 = FreeImage_Load(FreeImage_GetFIFFromFilename(filename_i),filename_i,0);
  printf("GetBits()[0]: 0x%02X\n", FreeImage_GetBits(dib0)[0]);
  FreeImage_Unload(dib0);
  FreeImage_DeInitialise();
  return 0;
}
На такой картинке: http://pacify.ru/images/freeimage-getbits-bug-46753.jpg
возвращает:

$ ./_test 46753.jpg 
GetBits()[0]: 0xFE
Хотя первый пиксель там = #FFFFFF. Почему такое происходит? Ведь программа должна выдавать 0xFF.
Другая программа (через JPEGLIB) возвращает правильные значения компонентов: FF, FF, FF.

★★★★★

На SourceForge ответили:

This occurs because of the lossy nature of JPEG compression.
For speed reasons by default FreeImage loads JPEG in a rather low
quality (60%). By using a different load flag you can instruct
FreeImage to increase the quality:
FIBITMAP *dib0 = FreeImage_Load(FreeImage_GetFIFFromFilename(filename_i),filename_i, JPEG_ACCURATE);

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.