Как проверить, является ли JPEG форматом RGB или CMYK?

StackOverflow https://stackoverflow.com/questions/4487739

  •  11-10-2019
  •  | 
  •  

Вопрос

Я использую C ++, GDI+, Windows. Как проверить, является ли JPEG RGB или CMYK?

Это было полезно?

Решение

Если вы используете библиотеку IJG Libjpeg, вы можете открыть файл JPEG, прочитать заголовок и посмотреть, является ли он серого (монохромный), RGB или CMYK. (На самом деле, есть несколько бесплатных библиотек JPEG, но IJG Libjpeg, вероятно, наиболее часто используется.) Вы можете найти источники Libjpeg на:

http://www.ijg.org/files/jpegsrc.v8c.tar.gz

Примерным примером того, как читать заголовок, будет что -то вроде:

struct jpeg_decompress_struct dinfo;
FILE* file = fopen(fname, "r");

/* Step 1: allocate and initialize JPEG decompression object */
jpeg_create_decompress(&dinfo);

/* Step 2: specify data source (eg, a file) */
jpeg_stdio_src(&dinfo, file);

/* Step 3: read file parameters with jpeg_read_header() */
(void) jpeg_read_header(dinfo, TRUE);

/* Step 4: set parameters for decompression
 * In this example, we don't need to change any of the 
 * defaults set by jpeg_read_header(), so we do nothing here.
 */
if (dinfo->jpeg_color_space == JCS_CMYK || dinfo->jpeg_color_space == JCS_YCCK) {
    // CMYK
} else if (dinfo->jpeg_color_space == JCS_RGB || dinfo->jpeg_color_space == JCS_YCbCr) {
    // RGB
} else if (dinfo->jpeg_color_space == JCS_GRAYSCALE) {
    // Grayscale
} else {
    ERREXIT(dinfo, JERR_CONVERSION_NOTIMPL);
    // error condition here...
}

/* You can skip the other steps involved in decompressing an image */

/* Step 8: Release JPEG decompression object */
jpeg_destroy_decompress(dinfo);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top