Как создать и написать индексированное изображение PNG в C ++ или C - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать и написать индексированное изображение PNG на C ++ или C с использованием библиотеки, переносимой на IOS и Android, поэтому я посмотрел на png ++, opencv и libpng. Я пытался использовать png ++, но не смог правильно создать индексные изображения. Я не смог разобраться в индексированных изображениях libpng и не нашел пример. opencv, похоже, не обрабатывает индексированные изображения png. png ++ кажется более простым в использовании, но в документации не указывается, как устанавливать свои собственные значения для проиндексированных изображений, просто в этом разделе помещается «...» (см. ниже). Любая помощь будет оценена.

#include <png++/png.hpp>
 //...
 png::image< png::index_pixel > image;
 png::palette pal(256);
 for (size_t i = 0; i < pal.size(); ++i)
 {
     pal[i] = png::color(i, 255 - i, i);
 }
 image.set_palette(pal);
 ...
 image.write("palette.png");

1 Ответ

1 голос
/ 22 апреля 2020

Вы создаете индексированное изображение таким же образом, как и изображение rgb, за исключением того, что тип пикселя равен png::index_pixel вместо png::rgb_pixel.

В противном случае оно выглядит так же, как в примере в документация:

for (png::uint_32 y = 0; y < image.get_height(); ++y)
{
    for (png::uint_32 x = 0; x < image.get_width(); ++x)
    {
        image[y][x] = png::index_pixel(/* the index value */);
        // non-checking equivalent of image.set_pixel(x, y, ...);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...