libpng 从内存缓冲区加载文件

Posted

技术标签:

【中文标题】libpng 从内存缓冲区加载文件【英文标题】:libpng load file from memory buffer 【发布时间】:2013-01-10 22:46:49 【问题描述】:

我尝试查看 libpng 文档,但没有找到我要查找的内容。

我有一个完全在内存缓冲区中的 PNG 文件,我该如何加载这个文件(除了创建临时文件的明显解决方案)?

不确定它是否相关,但我正在使用 ctypes 从 Python 调用 libpng。

【问题讨论】:

【参考方案1】:

我找到了this article,它很好地描述了如何从内存中读取 PNG 文件。

总之,您必须创建一个自定义回调函数并使用png_set_read_fn 将其提供给libpng。然后在该回调函数中,您从内存缓冲区而不是文件中读取。

【讨论】:

链接已失效。 链接已复活 这是一个很好的资源。我发现的一件事是,如果您的 ReadDataFromInputStream 函数实际上并未将真正的 PNG 数据复制到 outBytes,它会导致 png_read_info() 使程序崩溃。我只是在开发过程中返回占位符字节,它正在崩溃。当我返回真实字节时,它起作用了。 (这似乎有点吓人,因为它似乎暗示如果 .png 文件损坏,libpng 可能会崩溃而不是返回错误。)

以上是关于libpng 从内存缓冲区加载文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 ATL CImage 从内存缓冲区加载图像

如何使用 libpng 将 PNG 编码为缓冲区?

如何将数据从资源指针存储到 C++ 中的静态内存缓冲区?

从导致 AccessViolationException 的线程访问文件缓冲区

python多线程读取只读内存缓冲区绕过GIL

来自内存缓冲区的 DirectFB 数据