Я пытаюсь загрузить черно-белый PNG-файл с использованием GDI + в Windows 7/64bits Pro. Однако, если я использую значение, возвращаемое с Image::GetPixelFormat(), он сообщает мне, что pixelFormat равен PixelFormat32bppARGB
.GDI +: черно-белая PNG загружается как PixelFormat32bppARGB
Если я конвертирую этот PNG в JPG и/или TIFF, теперь он говорит мне, что pixelFormat теперь PixelFormat8bppIndexed
.
Глядя на определение значений thoses here, не говорит много. Однако, глядя на них here, показано, что PixelFormat32bppARGB
фактически является результатом (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)
.
Мои вопросы:
- Что делает следующие средства:
PixelFormatCanonical: Is in canonical format
? - Я понимаю, что GDI + может представлять собой однокомпонентное изображение в градациях серого как 32bpp ARGB, без предварительной мультиплексированной альфы, но как я могу проверить, что базовое представление на самом деле является полутоновой? Это будет полезно, поскольку я хочу только скопировать один компонент из буфера ARGB.
Вот некоторая информация из файла PNG с помощью команды pnginfo
из оболочки UNIX:
$ pnginfo input.png
input.png...
Image Width: 2492 Image Length: 3508
Bitdepth (Bits/Sample): 8
Channels (Samples/Pixel): 1
Pixel depth (Pixel Depth): 8
Colour Type (Photometric Interpretation): GRAYSCALE
Image filter: Single row per byte filter
Interlacing: No interlacing
Compression Scheme: Deflate method 8, 32k window
Resolution: 11811, 11811 (pixels per meter)
FillOrder: msb-to-lsb
Byte Order: Network (Big Endian)
Number of text strings: 0 of 0
Это даже вопрос с wine
реализации GDI +. Current wine 1.6.2 тоже думаю мой ввод PNG действительно: PixelFormat8bppIndexed
.
Ваше предположение, что GetPixelFormat() сообщает вам что-либо о формате файла, просто неверно. Он сообщает вам, какой именно кодек изображения выбрал для представления данных растровых изображений в памяти. Это никогда не будет одним из оттенков серого, оно несовместимо с вашим оборудованием. –