Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Image 比特性能_Image_Tiff_Bitblt - Fatal编程技术网

Image 比特性能

Image 比特性能,image,tiff,bitblt,Image,Tiff,Bitblt,我有一个将多页tiff拆分为单页的函数,它使用windows BitBlt函数。就性能而言,视频卡是否会对拆分产生影响?使用直接的C/C++库是否值得?如果BitBlt可以将页面映射到视频内存中,那么视频卡很有可能比CPU快得多。这有几个原因: 该卡将与您的CPU并行运行,因此您可以在其运行时执行其他工作 视频卡经过优化,可以自己执行内存复制,而不必让CPU将每个字从一个地方复制到另一个地方。这将为其他事情释放CPU总线 视频卡可能有一个更大的字大小用于数据移动,如果您的blit附加了任何操作

我有一个将多页tiff拆分为单页的函数,它使用windows BitBlt函数。就性能而言,视频卡是否会对拆分产生影响?使用直接的C/C++库是否值得?

如果BitBlt可以将页面映射到视频内存中,那么视频卡很有可能比CPU快得多。这有几个原因:

  • 该卡将与您的CPU并行运行,因此您可以在其运行时执行其他工作
  • 视频卡经过优化,可以自己执行内存复制,而不必让CPU将每个字从一个地方复制到另一个地方。这将为其他事情释放CPU总线
  • 视频卡可能有一个更大的字大小用于数据移动,如果您的blit附加了任何操作标志,这些可能会被硬件优化。此外,大多数视频卡上的内存比系统内存快
请注意,这些事情并不总是正确的。例如,如果您的卡共享系统内存,那么它对内存的访问速度不会比CPU快。但是,您仍然可以获得并行支持

最后,将图像传输到卡和卡的开销可能会压倒在卡上进行图像传输所获得的速度提升。所以你只需要做实验


我应该补充一点——我认为您需要在设备上下文中指定内存在卡上。我不认为仅仅创建一个内存上下文就可以对视频卡做任何特殊的处理。

视频卡不会参与任何活动,除非它是BitBlt的目标HDC。专用于成像功能的库应能更好地执行此任务,因为最终您将把这些功能写入磁盘


如果您正在对图像数据进行更改,那么使用视频卡可能会有所帮助;但前提是要为目标tiff渲染大量新的图像数据,尤其是3D场景等。

那么您是否要将tiff渲染为一个巨大的图像?@Jeff-否,我没有渲染tiff-我只是将多页tiff分割成包含每个页面的文件。您的新文件是什么图像格式?@Jeff-它们将被分割成单独的单页tiff文件。我的经验是,BitBlt可能会很慢,本文对此给出了一些建议:有一点需要记住:特定于卡的驱动程序总是经过优化以尽可能地加速,而基于CPU的代码可能不会得到优化。或者CPU可能不支持代码可以访问的优化。加速的blitting支持已经存在很长时间了,根据内存体系结构的安排,您可以获得对自动DMA的支持。对于批量吞吐量来说,这可能会有很大的不同。手头的任务是分割TIFF图像。事先了解TIFF布局的库不需要执行创建HDC和支持对象的所有其他中间步骤。此外,由于TIFF是光栅格式,因此不需要像JPEG和其他相关格式那样进行转换。