Что это за свойства в libjpeg и libpng? - PullRequest
1 голос
/ 02 августа 2020

На самом деле я использую libjpeg для чтения и сохранения изображений JPEG. Итак, сначала, каковы возможности размера пикселя (info.output_components;)? Каковы возможности цветового пространства (info.out_color_space;)? И может ли изображение JPEG иметь альфа-канал?

Я тоже использую libpng. Итак, сначала, какова разрядность (png_get_bit_depth(png, info);)? А какой цветотип (png_get_color_type(png, info);)?

Спасибо!

1 Ответ

1 голос
/ 02 августа 2020

Итак, сначала, каковы возможности размера пикселя (info.output_components;)?

От до c

output_components равно 1 (индекс цветовой карты) при квантовании цветов; в противном случае он равен out_color_components. Это количество значений JSAMPLE, которые будут выдаваться на пиксель в выходных массивах.

  int out_color_components;     /* # of color components in out_color_space */
  int output_components;        /* # of color components returned */
  /* output_components is 1 (a colormap index) when quantizing colors;
   * otherwise it equals out_color_components.

Каковы возможности цветового пространства (info.out_color_space;)?

Из источника

  JCS_UNKNOWN,            /* error/unspecified */
  JCS_GRAYSCALE,          /* monochrome */
  JCS_RGB,                /* red/green/blue as specified by the RGB_RED,
                             RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros */
  JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV) */
  JCS_CMYK,               /* C/M/Y/K */
  JCS_YCCK,               /* Y/Cb/Cr/K */
  JCS_EXT_RGB,            /* red/green/blue */
  JCS_EXT_RGBX,           /* red/green/blue/x */
  JCS_EXT_BGR,            /* blue/green/red */
  JCS_EXT_BGRX,           /* blue/green/red/x */
  JCS_EXT_XBGR,           /* x/blue/green/red */
  JCS_EXT_XRGB,           /* x/red/green/blue */
  /* When out_color_space it set to JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR,
     or JCS_EXT_XRGB during decompression, the X byte is undefined, and in
     order to ensure the best performance, libjpeg-turbo can set that byte to
     whatever value it wishes.  Use the following colorspace constants to
     ensure that the X byte is set to 0xFF, so that it can be interpreted as an
     opaque alpha channel. */
  JCS_EXT_RGBA,           /* red/green/blue/alpha */
  JCS_EXT_BGRA,           /* blue/green/red/alpha */
  JCS_EXT_ABGR,           /* alpha/blue/green/red */
  JCS_EXT_ARGB,           /* alpha/red/green/blue */
  JCS_RGB565              /* 5-bit red/6-bit green/5-bit blue */

Может ли изображение JPEG иметь альфа-канал?

Как видно из Исходный код выше, libjpeg-turbo поддерживает альфа-канал для jpeg.

Итак, сначала, что такое битовая глубина (png_get_bit_depth(png, info);)?

Проще говоря, количество битов, используемых для представления каждого пикселя в изображении. Чем выше битовая глубина, тем больше цветов может содержать каждый пиксель.

Из PNG Spe c:

Тип цвета - однобайтный целое число, которое описывает интерпретацию данных изображения. Коды типа цвета представляют собой сумму следующих значений: 1 (используемая палитра), 2 (используемый цвет) и 4 (используемый альфа-канал). Допустимые значения: 0, 2, 3, 4 и 6.

  Color    Allowed    Interpretation
  Type    Bit Depths
  
  0       1,2,4,8,16  Each pixel is a grayscale sample.
  
  2       8,16        Each pixel is an R,G,B triple.
  
  3       1,2,4,8     Each pixel is a palette index;
                      a PLTE chunk must appear.
  
  4       8,16        Each pixel is a grayscale sample,
                      followed by an alpha sample.
  
  6       8,16        Each pixel is an R,G,B triple,
                      followed by an alpha sample.
...