什么是使用Win32 DIB的颜色查找表的正确方法?

我正在编写一些代码来对16位DICOM图像(在内存中加载为16位DIB)执行窗口调平。我的窗口调平代码已完成,并通过生成查找表来将源像素值映射到所需的最终像素值。 我不确定的是如何将此查找表应用于图像。我看到BITMAPINFO对象上有一个字段'bmiColors',类型为RGBQUAD []。我已经尝试将查找表分配给此属性,但它似乎没有任何效果。我也尝试过SetDIBColorTable函数,但它似乎也没有对屏幕输出产生任何影响。 我正在尝试做什么(在绘画时应用我的查找表而不是修改像素数据本身)甚至在GDI中支持,或者实际上应该循环通过像素数据本身在blitting之前逐个改变像素值? 我是否使用BitBlt或SetDIBitsToDevice函数似乎也没有区别。他们在这里往往表现得一样。 如果能够更容易地实现我想要的东西,我愿意使用DirectX。我之前没有使用它,所以如果它作为答案提供,那么示例代码会很好。 我的代码非常关键,所以我正在寻找实现这一目标的最快方法,即使它可能涉及更多的工作/代码。     
已邀请:
颜色表仅用于8-bpp或更低的位图,因此GDI将在16-bpp图像中忽略它们。 (该表最多可以有256种颜色,以字节为索引。) (从技术上讲,该表可能仍然用于指定哪些颜色最重要,但这对您没有帮助,而且我不确定这些日子是否真的被使用过。) 我也发现GDI在索引颜色模式下工作不可靠,所以我不推荐它。 (在这里看到我的问题,虽然它与你正在做的事情不一样,但是你应该依靠GDI来解决这个问题。它是关于从16-bpp或32-bpp转换为索引颜色,以及GDI在做什么的问题准确地说:GDI无法转换为带有精确调色板的索引颜色? - 此外,链接的代码会设置一些索引颜色的位图,因此您可能会发现它很有用,但我认为它们不会适用于您所使用的内容无论如何都要用16-bpp数据。) 对于你正在做的事情,我建议你自己直接修改位图数据,使用类似std :: map的东西作为快速查找表,用于从一组颜色转换到另一组颜色。     

要回复问题请先登录注册