轻量级C++映像库

light-weight C++ image library

本文关键字:映像 C++ 轻量级      更新时间:2023-10-16

我一直在寻找一个简单、小巧但健壮、快速(不是全面!)的C++图像库(如果没有C++版本,C就足够了)。

我正在寻找的主要功能是:

  • 免费(开源是一个优势)
  • 专为速度打造
  • 没有巨大的功能膨胀(像ImageMagik,它确实很全面,但却是一个庞大的)
  • 内存占用空间很小
  • 仅支持绝对最小的功能,如加载/保存、调整大小、在格式之间转换。没什么好看的
  • "损坏"文件的错误恢复(与stb_image.c不同,后者的错误恢复非常差)
  • MSVC和gcc友好(我使用CxImage很多年了,但在最新版本中,我在MSVC 2010中遇到了问题,现在对它的积极开发和支持似乎已经消失了,所以我要放弃它)
  • 应直接或通过使用libpng等通用库来支持流行的现代格式,如JPEG2000
  • 不在乎它是DirectX还是OpenGL,因为我不打算用它来显示图像——只是为了给网站进行文件处理
  • 同时支持静态和动态链接是一个优势
  • 线程支持是一大优势

我看过的图书馆因为这样或那样的原因被解雇了:

  • CxImage(不再进行主动开发)
  • ImageMagik-太大(而且速度慢)
  • stb_image.c-错误处理,不支持足够的图像格式
  • DevIL(还没有被解雇,但也没有太多研究它——几分钟前刚刚在SO上的一篇类似帖子中了解到它)——根据它的大小和功能集,它看起来很有希望满足我的需求
  • FreeImage(与DevIL相同-稍后会看一看,但根据我的口味,它的尺寸有点大)
  • 土壤(与stb_image.c相同)
  • TimThumb-它是一个PHP,而不是C/C++

简言之,我只想要尽可能小、尽可能快的东西,而牺牲的只是绝对最低限度的功能,但到目前为止,我还没有找到合适的候选人。

这个社区有什么建议吗?但请记住我上面列出的限制条件——我认为在"X"不能满足我一半需求的情况下,抛出一个"你尝试过X吗?"的答案是不可以的:)

编辑:深入了解DevIL,它似乎正是我所需要的。它轻盈、小巧、结实。现在我只需要确保它的性能。哦,还有CImage(我忘了在列表中提到它)-不喜欢它的性能(尽管我不得不承认,至少可以说,仅模板实现的想法很可爱)

我强烈建议您围绕libpng和jpeglib编写一个小库(以及您需要支持的格式的其他所有低级库)。它并没有那么难,您可以编写所需的所有功能。

作为一种替代方案,您可以使用一些已经存在的用于这些库的好的c++包装器。以下是一些例子:

  • png++
  • JPEGReader/JPEGWriter

看看CImg库,它只是一个单独的头文件