libbpg — как передать байты вместо пути к файлу

Я хочу использовать libbpg библиотека (написанная на C) в проекте C ++ (https://github.com/mirrorer/libbpg)

Мне нужно передать байты изображения в качестве входных данных вместо абсолютного пути к файлу изображения, и мне также нужен результат вывода в байтах (вместо «.png> .bpg» Мне нужны «байты> байты»).

Например. Я хотел бы захватывать кадры с веб-камеры и конвертировать их в байты bpg, а также передавать эти байты по сети

main функция из libbpg bpgenc.c принимает строку пути к файлу в качестве входного параметра

https://github.com/mirrorer/libbpg/blob/master/bpgenc.c#L2909

Любые предложения, как передать байты вместо имени файла?

Например, если камера возвращает байты изображения в формате BGR, как я могу преобразовать их в Image из libbpg?

0

Решение

Просто продолжайте вникать в код, вы можете увидеть main звонит load_image:

2909: img = load_image(&md, filename, color_space, bit_depth, limited_range,

который вызывает либо read_png (1456) или read_jpeg (1459). За png например, файл используется по адресу:

950: png_init_io(png_ptr, f);

и, к счастью, есть такой вопрос для этого: читать изображение в формате png в буфере

Таким образом Shahbaz ответы, вам нужно подделать прочитанное (взято прямо из этого ответа):

struct fake_file
{
unsigned int *buf;
unsigned int size;
unsigned int cur;
};

static ... fake_read(FILE *fp, ...) /* see input and output from doc */
{
struct fake_file *f = (struct fake_file *)fp;
... /* read a chunk and update f->cur */
}

struct fake_file f = { .buf = pngBuff, .size = pngbuffleng, .cur = 0 };
/* override read function with fake_read */
png_init_io(png_ptr, (FILE *)&f);

и это позволит оригинальной функции работать нормально.

Конечно, если все это слишком хлопотно, вы можете просто записать свои байты в файл и затем использовать библиотеку как обычно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]