首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用libjpeg将字节流转换为RGB

使用libjpeg将字节流转换为RGB
EN

Stack Overflow用户
提问于 2009-05-07 04:16:46
回答 4查看 2.6K关注 0票数 4

我截取一个数据包并提取有效载荷。该有效载荷是压缩的jpeg字节流数据(例如,该数据被分配给unsigned char *payload)。我知道如果我有一个文件指针,那么我可以使用libjpeg库来提取图像信息。我的问题是,有没有一种方法可以将我的指针(*payload)传递给libjpeg函数,以获取图像的RGB值和尺寸?

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2011-09-02 01:00:02

Re: Adam Rosenfield的回答是,你不需要自己实现任何东西:jpeg_mem_src()会做你想做的事情:

代码语言:javascript
复制
jpeg_mem_src(&cinfo, payload, payload_len);

您必须将整个图像存储在内存中(并知道其长度)。

obStackoverflow:我知道,一个非常古老的问题的答案,但今天我不得不这样做,这个页面在我的网络搜索中排名第一或第二。

票数 4
EN

Stack Overflow用户

发布于 2009-05-07 05:10:16

要添加到Tal's answer中,您应该看一看jdatasrc.cjpeg_stdio_src()函数的实现。该函数的目的是初始化数据源对象,即cinfo->src。因此,您应该做的是:

  1. 创建一个结构(类似于jdatasrc.c中的my_source_mgr结构),该结构的第一个成员是struct jpeg_source_mgr的实例。添加您认为有必要的任何其他成员。请注意,我们实际上是在进行手动继承--在C++中,我们将定义一个从jpeg_source_mgr派生的类,而在jpeg_source_mgr中声明的各种函数指针将改为虚函数。但是,我们使用的是C语言,所以我们必须以一种很难的方式来处理继承和多态性。

  1. 为结构的实例分配空间,确保分配正确的字节数,并填写数据成员。

  1. 实现以下五个功能:

代码语言:javascript
复制
- `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)`

请注意,对于内存中的缓冲区,这些函数可能非常简单。

  1. 最后,初始化jpeg_source_mgr成员中的函数指针以指向这些函数。

有了它,您就可以使用它而不是jpeg_stdio_src()来初始化数据源管理器,然后就可以像对文件系统中的文件进行解码一样开始工作了。

票数 3
EN

Stack Overflow用户

发布于 2009-05-07 04:43:01

libjpeg具有输入/输出管理器,可以对其进行扩展以使用原始内存缓冲区或任何其他形式的I/O,但在该库的发行版中实际上只实现了AFAIK文件*。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/832864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档