我想在C ++项目(https://github.com/mirrorer/libbpg)中使用 libbpg 库(用C编写)
我需要传递图像字节作为输入而不是图像文件的绝对路径,并且我也需要输出结果以字节为单位(而不是“ .png> .bpg”,我需要“ bytes> bytes”)。 / p>
例如我想从摄像头捕获帧并将其转换为bpg字节,然后通过网络传递这些字节
libbpg的main
的 bpgenc.c
函数将文件路径字符串作为输入参数
https://github.com/mirrorer/libbpg/blob/master/bpgenc.c#L2909
有没有建议如何传递字节而不是文件名?
例如,如果相机返回的图像字节为BGR格式,那么如何将其转换为libbpg的Image
?
答案 0 :(得分: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);
令人高兴的是,有一个SO问题:read a png image in buffer
因此,当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);
这将使原始功能正常工作。
当然,如果所有这些都太麻烦了,您可以将字节写入文件,然后正常使用该库。