我截取一个数据包并提取有效载荷。该有效载荷是压缩的jpeg字节流数据(例如,该数据被分配给unsigned char *payload)。我知道如果我有一个文件指针,那么我可以使用libjpeg库来提取图像信息。我的问题是,有没有一种方法可以将我的指针(*payload)传递给libjpeg函数,以获取图像的RGB值和尺寸?
谢谢。
发布于 2011-09-02 01:00:02
Re: Adam Rosenfield的回答是,你不需要自己实现任何东西:jpeg_mem_src()会做你想做的事情:
jpeg_mem_src(&cinfo, payload, payload_len);您必须将整个图像存储在内存中(并知道其长度)。
obStackoverflow:我知道,一个非常古老的问题的答案,但今天我不得不这样做,这个页面在我的网络搜索中排名第一或第二。
发布于 2009-05-07 05:10:16
要添加到Tal's answer中,您应该看一看jdatasrc.c中jpeg_stdio_src()函数的实现。该函数的目的是初始化数据源对象,即cinfo->src。因此,您应该做的是:
jdatasrc.c中的my_source_mgr结构),该结构的第一个成员是struct jpeg_source_mgr的实例。添加您认为有必要的任何其他成员。请注意,我们实际上是在进行手动继承--在C++中,我们将定义一个从jpeg_source_mgr派生的类,而在jpeg_source_mgr中声明的各种函数指针将改为虚函数。但是,我们使用的是C语言,所以我们必须以一种很难的方式来处理继承和多态性。- `void init_source(j_decompress_ptr)`
- `boolean fill_input_buffer(j_decompress_ptr)`
- `void skip_input_data(j_decompress_ptr, long)`
- `boolean resync_to_start(j_decompress_ptr, int)`
- `void term_source(j_decompress_ptr)`请注意,对于内存中的缓冲区,这些函数可能非常简单。
jpeg_source_mgr成员中的函数指针以指向这些函数。有了它,您就可以使用它而不是jpeg_stdio_src()来初始化数据源管理器,然后就可以像对文件系统中的文件进行解码一样开始工作了。
发布于 2009-05-07 04:43:01
libjpeg具有输入/输出管理器,可以对其进行扩展以使用原始内存缓冲区或任何其他形式的I/O,但在该库的发行版中实际上只实现了AFAIK文件*。
https://stackoverflow.com/questions/832864
复制相似问题