windows - 在内存中绘制 16 位灰度位图

标签 windows delphi bitmap gdi

需要绘制 16 位灰度内存位图。将 TCanvas 与位图相关联会很棒。我使用 Delphi,但任何语言都可以。我只需要这个想法。

有什么想法吗?

将灰度转换为 RGB 不是一种选择,因为在此过程中会丢失一半的分辨率(像素深度)。

最佳答案

您可以尝试像 ImageFX 这样的图像库,或者对于开源库,请尝试 Graphics32 ,或 VampyreImagingLIbrary ,根据其文档 here它支持一些操作,例如在加载到缓冲区中的图像上绘制线条和矩形。我希望扫描仪(图像处理)库比非成像库更好地支持灰度图像,但我不希望扫描仪图像处理库基于内存。

但是如果您想直接在可见缓冲区中完成工作(您提到了 TCanvas),并且您愿意将自己限制在 Delphi XE 和 Windows 7 上,您可以使用 Direct2D 上下文,它支持 16 和32 位深度,但由于 32 位颜色深度相对于灰度图像仍然只有 8 位深度,我认为所有普通的非灰度图形库都会丢失一些关于你的信息。

如果你不介意使用有点旧的东西,并且有点依赖于 Microsoft Windows,你可以研究使用 DirectDraw 样式(现在合并到 DirectX 中)来进行缓冲区管理(保存 16 位数据)也让你在上面画画。不过,我不知道它对 16 位灰度图像有任何特殊支持。

有趣的是,WPF native 支持 16 位灰度。如果您能了解他们是如何做到的,您就可以在 Delphi 中模仿该技术。该链接还讨论了使用 OpenGL 进行 16 位亮度,但问题中没有暗示 OpenGL 允许这样做。我发现有人试图使用 OpenGL对于用 delphi(16 位灰度)图像显示编写的医疗应用程序,但没有提及修改内存中的图像。

关于windows - 在内存中绘制 16 位灰度位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6780464/

相关文章:

visual-studio-2012 - "error RC2175: icon.ico is not in 3.00 format"是什么意思

windows - Log4j 不将 System.out 写入文件

Delphi XE3 stringgrid 固定单元格单击事件不触发

delphi - 为什么 CharInSet 比 Case 语句更快?

iphone - 弯曲位图图像 - 就像在 PS5 中一样。算法?代码?图像处理?

android - 如何使用矩阵将我的位图定位在 Canvas 上?

c - HANDLE - 文件句柄和目录句柄结构

linux - 通过单个命令行操作确定操作系统

windows - 如何在 Windows 上以编程方式触发 Flip 3D?

c++ - Borland BCB5 TInifile 使用 Readstring() 忽略引号?