2011-01-20 3 views
2

Я использую PNG ++, который работает нормально, но вы должны установить тип пикселя в качестве параметра шаблона:Выясните детский тип цвета с помощью PNG ++

png::image<png::rgb_pixel> image("input.png"); 

Проблема в том, я не знаю, на время компиляции, будь то rgb, rgba и т. д. Не похоже, чтобы найти способ заставить png ++ рассказать мне, какая информация действительно находится в png.

Любые идеи?

Спасибо.

+0

Что произойдет, если вы попробуете неправильный тип пикселя в параметре шаблона? Вы получаете исключение, или построенный объект изображения имеет пустые/недействительные данные? –

+0

Вы пробовали png :: info? –

+0

Если вы попробуете неправильный тип пикселя, он преобразует его. и png :: info, находящийся в png :: image, дает какой-либо тип цвета в качестве параметра шаблона. – DaedalusFall

ответ

2

Попробуйте использовать reader. Затем проверьте функции-члены его базового класса, io_base. Я думаю, у него есть то, что вы ищете.

3

Эй, автор png++ здесь, чтобы помочь :)

Если вам действительно нужно знать, какой формат пикселя в изображении PNG, используя png::reader является поддерживаемый способ:

png::reader<std::istream> reader(my_stream); 
reader.read_info(); 
png::color_type color_type = reader.get_color_type(); 

Однако, если вы не заботитесь о типе цвета изображения и просто хотите его загрузить, например RGBA, я бы предложил использовать png::image<rgba_pixel> image("input.png"): это автоматически преобразует PNG-изображение любого типа в RGBA для вас.

+0

На самом деле я просто передаю изображение прямо в OpenGL, поэтому кажется, что стыдно давать ему изображение в RGBA, когда я могу дать ему один в сером цвете. – DaedalusFall

+0

PS Спасибо за написание png ++! – DaedalusFall

Смежные вопросы