Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 任何好的C++;用于显示大型位图的库_C++_Bitmap_Sdk - Fatal编程技术网

C++ 任何好的C++;用于显示大型位图的库

C++ 任何好的C++;用于显示大型位图的库,c++,bitmap,sdk,C++,Bitmap,Sdk,我目前正在使用MFC/GDI和Stingray在我的应用程序中显示位图,并正在寻找更好的解决方案。具体而言 更快的绘图速度-基于StretchDIBits,我当前的解决方案速度较慢 更好的渲染质量-缩放位图时,StretchDIBits的渲染质量非常糟糕 支持旋转位图 支持以所有流行格式加载/保存 支持大型位图-我经常使用~64mb的航空照片作为12000x12000 JPEG。GeoTIFF支持也会很有用 与MFC文档/视图兼容,包括打印(例如,必须能够呈现给CDC) 访问源代码是好的,但不

我目前正在使用MFC/GDI和Stingray在我的应用程序中显示位图,并正在寻找更好的解决方案。具体而言

  • 更快的绘图速度-基于StretchDIBits,我当前的解决方案速度较慢
  • 更好的渲染质量-缩放位图时,StretchDIBits的渲染质量非常糟糕
  • 支持旋转位图
  • 支持以所有流行格式加载/保存
  • 支持大型位图-我经常使用~64mb的航空照片作为12000x12000 JPEG。GeoTIFF支持也会很有用
  • 与MFC文档/视图兼容,包括打印(例如,必须能够呈现给CDC)
  • 访问源代码是好的,但不是必需的
  • 易于使用/移植现有GDI代码
虽然免费总是不错的,但我不介意花合理的钱在一个像样的图书馆上,尽管没有运行时的版税成本。谷歌的建议如下:


任何人都有这方面的经验,或者可以推荐一个好的替代方案吗?

我认为你不太可能在windows上找到比GDI更快的东西,因为它有内核级的支持,而这是开源解决方案所不具备的


您可能还想查看OpenGL或Direct2D/Direct3D,因为它们也可以直接访问帧缓冲区。对于3D API,纹理大小可能会成为一个问题,因为大多数标准限制为4096x4096。我过去使用过它,可以添加到您的评估列表中。

自XP早期以来,GDI+在任何Windows机器上都可用。它有所有流行图像格式的编解码器,包括JPEG。用于高质量图像重缩放的非常好的过滤器。无限制的图像旋转。通过图形类绘制到CDC。C++包装器的源代码在SDK GPULISUXXX .h头文件中可用。速度可能相当,但渲染是基于软件的,以确保兼容性


<> >代码> >包含< /COD>,并直接使用C++包装器。SDK文档。CImage类在MFC中可用,但它并不公开所有功能。

我不相信速度的问题。如果我没有缩放位图,这可能是真的,但是StretchDIBits在缩放和绘制4000x4000像素位图(比如300x300像素的方框)时似乎没有那么快。这也产生了可怕的结果。下面关于StretchDIBits速度的讨论也很有趣。移动整个OpenGL当然值得考虑,但可能会涉及大量工作,并在打印方面带来问题。StretchDIBits进行简单的最近邻缩放。对于某些应用程序,这正是您想要的,而不是别的。(例如,对于图像编辑器缩放)我看到您正在将JPEG缩放到8倍以上。在这种情况下,您应该在JPEG级别进行缩放,而不是在位图级别。这要快得多。JPEG使用傅立叶分量压缩8x8像素的块。显式存储的{0,0}组件是平均值。因此,将JPEG图像缩小8倍是非常快速且非常简单的。例如,您将从12000*12000像素的JPEG中获得1500*1500位图,您的磁盘速度很可能是限制因素。@mAlters,评论不错,鉴于我使用的命令是StretchDIBits,我猜您的说法是正确的。这可能是很好的第一步,因为它应该是一个非常容易的港口。我已经打算从GDI交换到GDI+有一段时间了,所以现在可能是咬紧牙关的时候了。