我正在编写一些代码以在16位DICOM图像上执行窗口级别(该代码为16位DIB中的内存中)。我的窗口级别代码已完成,并通过生成查找表来映射源像素值将其映射到所需的最终像素值。

我不确定如何将此查找表应用于图像。我看到bitmapinfo对象在其上有一个“ bmicolors”的字段,该字段是rgbquad []。我尝试将查找表分配给此属性,但似乎没有效果。我还尝试了setDibColortable功能,但似乎对屏幕输出没有任何影响。

我想做的是(在GDI中支持的是在绘画而不是修改像素数据本身时应用我的查找表),还是实际上应该通过像素数据本身循环循环,然后旋转之前,更改像素值?

无论我使用BITBLT还是SETDIBITSTODEVICE函数,似乎也没有区别。他们俩在这里倾向于行为一样。

我愿意使用DirectX,如果这更容易实现我想要的东西。我以前从未使用过它,因此如果提供的示例代码作为答案,那将是不错的。

我的代码非常重要,因此我正在寻找最快的方法来实现这一目标,即使它可能涉及更多的努力/代码。

有帮助吗?

解决方案

颜色表仅用于具有8-BPP或以下的位图,因此GDI会在您的16-BPP图像中忽略它们。

(该表最多可以具有256种颜色,由字节索引。)

(从技术上讲,该表仍可用来指定哪种颜色最重要,但这对您没有帮助,我不确定这些天是否真的使用了。)

我还发现GDI在索引色模式下工作并不可靠,因此我不建议这样做。

(在这里请参阅我的问题,尽管与您所做的那样,这与您相同的事情应该使您依靠GDI。准确: GDI未能转换为精确的调色板索引颜色? - 此外,在其中链接的代码设置了一些索引颜色的位图,因此您可能会发现它有用,但是我认为它们不会适用于您对16-BPP数据的辅助。)

对于您正在做的事情,我建议您直接修改位图数据,使用std ::映射作为快速查找表,以从一组颜色转换为另一种颜色。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top