从ImageMagick/GraphicsMagick中的文件中间读取图像

从ImageMagick/GraphicsMagick中的文件中间读取图像,image,imagemagick,graphicsmagick,magick++,Image,Imagemagick,Graphicsmagick,Magick++,我有一个二进制文件,从一些数据开始。在这些数据之后,文件中嵌入了JPEG图像。在图像之后,文件将继续使用其他一些数据。我希望使用图像作为OpenGL纹理 目前,我知道的使用Magick创建OpenGL纹理的唯一方法是使用Magick读取图像文件,将其写入blob,然后将blob.data()上载到OpenGL(从以下链接:) 我正在尝试使用Magick++,但它只允许我指定一个文件名,而不允许我指定C风格的文件句柄或文件流…我的唯一选项是以下选项吗?: 将二进制文件中的JPEG图像部分另存为一个

我有一个二进制文件,从一些数据开始。在这些数据之后,文件中嵌入了JPEG图像。在图像之后,文件将继续使用其他一些数据。我希望使用图像作为OpenGL纹理

目前,我知道的使用Magick创建OpenGL纹理的唯一方法是使用Magick读取图像文件,将其写入blob,然后将blob.data()上载到OpenGL(从以下链接:)

我正在尝试使用Magick++,但它只允许我指定一个文件名,而不允许我指定C风格的文件句柄或文件流…我的唯一选项是以下选项吗?:

  • 将二进制文件中的JPEG图像部分另存为一个临时文件,并让Magick++读取该图像。我不希望这样做,因为写入磁盘会减慢我的程序

  • 将图像部分读入数组,创建一个以数组为数据的Blob,然后读取Blob以获得图像。我也不希望这样做,因为在获得图像后,我需要再次将图像数据写入另一个blob,整个代码变得不必要的长

  • 切换到另一个像DevIL这样的库,它为我想要的东西提供支持。不幸的是,DevIL的功能不如Magick丰富

  • 我还研究了Magick的核心C API,我可以在其中指定一个文件句柄,但文档中说,文件句柄在读取图像后由Magick关闭,这对我的程序绝对不好(让我的程序的其余部分重新打开二进制文件以继续其处理将是非常难看的


    如果有一种方法可以为Magick提供自定义I/O例程,或者更好的是,提供一种更干净的方式将Magick与OpenGL结合使用,请告诉我!

    下一版本的GraphicsMagick在读取图像后不会关闭输入文件句柄。您可以尝试最新的开发快照

    可以考虑使用MAMP()(内存映射文件)来访问数据,并使用MaGik++将其视为内存中的BLB。主要问题是,您可能不知道数据的长度,以防您需要在嵌入的JPEG图像数据之后访问数据。 向Magick++添加FILE*支持是很简单的。我没有这样做的唯一原因是出于哲学上的原因(C++与C)