如何使用 libjpeg 从 std::istream 读取 JPEG?
libjpeg 可以从 FILE* 或缓冲区读取 JPEG 数据。我的数据来自 std::istream
。我可以将整个 std::istream 读入缓冲区以与 libjpeg 一起使用,但如果可能的话,我宁愿让 libjpeg 直接从 std::istream 读取。这怎么能做到呢?
libjpeg can read JPEG data from a FILE*
or a buffer. My data is coming from a std::istream
. I could read the entire std::istream
into a buffer to use with libjpeg, but I'd rather have libjpeg read directly from the std::istream
if possible. How can this be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需要提供 istream 周围的包装器。例如,定义一个结构体
然后您需要四种方法来操作流:
以及一种将它们绑定到 JPEG 解压缩信息结构的方法:
在调用
jpeg_create_decompress
之后,调用您的make_stream
功能。You just need to provide wrappers around your istream. Define a struct, for instance
Then you need four methods to operate on the stream:
and one method to bind them to the JPEG decompression info structure:
After calling
jpeg_create_decompress
, call yourmake_stream
function.扩展 Anteru 的出色答案(大约 13 年前!),我根据它生成了以下代码。它通过使用 JpegStream 结构中的静态成员函数将所有内容包装在一起,并完全实现所有功能(尽管我还没有看到
skip
被调用,所以我不能 100% 确定它可以正常工作)。使用它很简单:
Expanding on Anteru's excellent answer (from almost 13 years ago!), I produced the following code based on it. It wraps everything up together by using static member functions in the JpegStream struct and fully implements all the functionality (although I have not yet seen
skip
get called, so I am not 100% sure that works properly).Using it is easy: