如何将调色板应用于位图

Posted

技术标签:

【中文标题】如何将调色板应用于位图【英文标题】:How to apply a palette to a bitmap 【发布时间】:2022-01-21 22:35:16 【问题描述】:

我正在自己制作一个 dicom 查看器。

修改dicom图片颜色成功,但是是纯色。

所以,为了解决单色部分,我带来了 dicom 调色板。 https://dicom.nema.org/dicom/2013/output/chtml/part06/chapter_B.html

但它以一种奇怪的方式进行,而不是我想象的方式。

经过深思熟虑,我发现位图的属性中有一个调色板。 但它根本不起作用。 搜索结果,很多答案可能都不行,建议直接触摸像素数据。 而且我调色板的长度总是为零。

Oncolor Red 版本

dicom HeartIronSetVersion

最终目标

 for (int i = 0; i < bitmap2.Width; i++)
                
                    for (int j = 0; j < bitmap2.Height; j++)
                    
                        actualColor = bitmap2.GetPixel(i, j);

                        int a = actualColor.A;
                        int r = actualColor.R;


                        Color col = palette[r];
                        //IronHeartsetWith Alpha
                        //redBitmap.SetPixel(i, j, Color.FromArgb(a, palette[r]));
                        //IronHeartSet
                        //redBitmap.SetPixel(i, j, col);
                        //RedVer
                        redBitmap.SetPixel(i, j, Color.FromArgb(a, r, 0, 0));

                        //redBitmap.SetPixel(i, j, Color.FromArgb((int)r, 1, 0, 0));

                    


                
               

【问题讨论】:

从骨架图像看来他们正在使用L value(照明),也许您可​​以尝试使用L = 0.299 * R + 0.587 * G + 0.114 * B将rgb转换为灰色,然后应用映射? 实际目标是什么?使用位图类中的内置调色板?将现有调色板应用于彩色图像?首先创建调色板? @JonasH 我已经做了调色板。更改此图像的颜色后,我将融合此图像。我不知道如何使用这个调色板来表达我在想的画面。 【参考方案1】:

我以为有一个特殊的代码可以在 diom 中应用调色板,但事实并非如此。

问题是由我的代码中调色板部分的像素错误引起的。

感谢所有回复的人。

(调色板中第 230 位之后的值为 0...)

结果

【讨论】:

以上是关于如何将调色板应用于位图的主要内容,如果未能解决你的问题,请参考以下文章

使用相同的自定义调色板将 8bpp 索引位图转换为 24bpp 并再次转换

从在线获取图像时如何解决“位图无效”错误

BMP文件结构(转)

关于BMP

Pillow 将 png 转换为 8bit 位图

应用于动态主题的自定义调色板