我需要加快我的图像查看器,并想知道我是否应该考虑创建自己的DirectX控件来执行此操作.
我的图像查看器显示医学图像.它们可能非常大.乳房X线照相术我们说的是55mb.像素数据是存储在ushort阵列中的16位灰度级.在没有深入细节的情况下,我目前的方法是将像素数据加载到ImageSource中,并使用WPF Image控件.
我从未对DirectX做过任何事情.值得深入探讨吗?它会比原生WPF更快吗?如果是这样有多大?或者,我应该忘记DirectX并研究可以改进现有方法的领域吗?
在有人这么说之前,我知道WPF使用DirectX.我想知道如果删除WPF层并自己编写DirectX将提高性能.
我有一些绘制数千兆字节卫星和图表图像的经验。即使不尝试过多优化,处理 55MB 左右的图像也应该可以正常工作。您还没有真正提供足够的细节来推荐一种替代方案,因此我将就其优缺点发表我的意见。
使用 2D Windows API 将是最容易实现的,并且如果您不需要旋转而只想显示图像以及缩放和平移,那么它应该始终足够快。如果您将其视为一张大图像,那么当您使用半色调绘制以提供漂亮平滑的图像时,缩小时的性能将不会那么好。这是因为每次绘制时它都必须读取全部 55mb 的图像。
为了解决这个性能问题,您可以制作多个位图,从而有效地对图像进行 mip 映射。当缩小时,您可以选择最接近您要绘制的分辨率的降低分辨率图像。如果您不熟悉 mip-mapping,这里有一个 Wikipedia 链接:
http://en.wikipedia.org/wiki/Mipmap
使用 DirectX 实现它的难度将是原来的 10 倍。不同的图形硬件具有不同的最大纹理尺寸。您很可能需要将图像分解为多个纹理来绘制,并且还必须跟踪渲染状态、查看矩阵等。
但是,如果您确实使用 DirectX,则可以实现大量实时照片调整。您可以通过简单地调整视图矩阵来进行实时旋转。您可以在像素着色器中轻松实现实时对比度、亮度、伽玛和锐度。
我可能会建议另外两个 API。如果您愿意将自己限制在 Vista 或更高版本,那么 Direct2D 会比 Direct3D 简单一些。另外,如果您需要在非 Windows 平台上实现它,我建议您使用 OpenGL。我当前的项目是在 Direct3D 中,因为几年前我们开始时 OpenGL 已经落后了,而且我没有预见到 Android 设备的普及。我现在希望我们使用 OpenGL 来代替。
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |