作为工业视觉应用的开发者,我经常拥有相当笨重的图像,如6000x4000像素和更大。
虽然相机和图像处理正在处理稳定的新图像流(并且此处理是主要任务),但我希望允许用户并行地舒适地查看其他图像。
在处理器(GDI等)上执行此操作会导致性能过高。例如,分析图像需要0.2秒,但只需0.8秒即可通过单个缩放显示(调整大小以适应某些控制),更不用说让用户继续前进并潜入其中。
由于Photoshop允许借助图形卡的快速内存和处理来显示和缩放,我想知道是否有人可以告诉我是否以及如何在我自己的代码中对此进行实验: 将数据推送到图形卡(这需要多长时间才能获得我的76MB rgb数据?)并让它显示在一些控件中而不需要太多努力来缩放并由用户移动到控件/卡中以进行用户交互。
不需要3D外观,只需在2D-rgb图像中移动和调整大小。 目标是在低处理器负载下实现快速和舒适的查看。
==>这是可能的(如纹理或类似的东西)? ==>当前的低端3D卡有> = 256MB的限制吗? ==>有人可以提出一些预期的持续时间(复制数据,缩放)吗?
答案 0 :(得分:2)
您将受到最大纹理大小的限制(因卡而异),因此您必须将大图像细分为几个较小的纹理。只要卡是AGP或PCI-E,就可以将实际纹理数据提供给视频内存。
答案 1 :(得分:1)
像素格式是什么?您的大小编号似乎适用于8位RGB,因此6000x4000像素的单个图像需要大约69 MB的空间。所以它应该适合低端显卡的纹理内存,假设Windows和其他应用程序没有太多的开销。当然,上传到显卡的内存需要一段时间;很难提供估算,因为它很可能随系统负载而变化,当然还有硬件/总线配置。
我更担心纹理大小的最大限制。我认为今天的高端卡在纹理中最大为4096x4096纹素,这意味着你将无法将图像融入单个纹理中。
设置DirectX来测试它应该不会太难,有很多教程。 Here是一个快速链接,显示如何使用纹理进行渲染;查看相同教程系列的前几部分,了解如何初始化内容。
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用Direct3D执行此操作。通过绘制纹理四边形,它可以轻松处理用于平移和缩放的大图像。
由于您的图像大小和屏幕尺寸(您没有6Kx4K显示器,是吗?),您需要创建一个系统,根据需要将大图像分页为纹理。考虑到输入数据的大小,我认为你会发现,你可以多快地将信息输入卡中的主要因素是磁盘和卡之间的I / O带宽。您可能会发现创建一种将图像存储在磁盘上的方法是值得的,该方法利用二维空间相干性(即平铺存储布局,而不是扫描线存储布局)以及计算点采样低分辨率版本。您可以使用未压缩的RGB自己完成所有这些操作,您不需要JPEG2000才能执行此操作。一旦选择图像,您就可以将此数据存储作为低优先级后台进程。首先将屏幕上可见的内容尽快显示在卡上,然后开始在磁盘上重新组织,以便更快地进行流式/缩放。