War*_* P 1
您可以尝试像 ImageFX 这样的图像库,或者对于开源图像库,请尝试Graphics32或VampyreImagingLIbrary,根据此处的文档,它支持一些操作,例如在加载到缓冲区中的图像上绘制线条和矩形。我希望扫描仪(图像处理)库比非成像库更好地支持灰度图像,但我不希望扫描仪图像处理库基于内存。
但是,如果您想直接在可见缓冲区中完成工作(您提到了 TCanvas),并且您愿意将自己限制在 Delphi XE 和 Windows 7 上,那么您可以使用 Direct2D 上下文,它支持 16 和 32 位深度但由于 32 位颜色深度相对于灰度图像而言仍然只有 8 位深度,我认为所有正常的非灰度图形库都会丢失一些有关您的信息。
如果您不介意使用有点旧的东西,并且与 Microsoft Windows 有点相关,您可以研究使用 DirectDraw 样式(现已合并到DirectX)来进行缓冲区管理(保存 16 位数据)并让您绘制它,也是如此。但我不知道它对 16 位灰度图像有任何特殊支持。
有趣的是,WPF本身就支持 16 位灰度。如果您能了解他们是如何做到这一点的,您就可以在 Delphi 中模仿该技术。该链接还讨论了使用 OpenGL 来实现 16 位亮度,但问题中没有暗示 OpenGL 允许这样做。我发现有人尝试使用OpenGL进行用 delphi 编写的医疗应用程序(16 位灰度)图像显示,但没有提及修改内存中的图像。