这是标准调色板吗?

时间:2013-05-09 17:20:01

标签: c# colors reverse-engineering

我正在为一个程序做一些逆向工程。我试图从旧数据中提取的一件事是从下面的颜色托盘中选择的颜色

enter image description here

旧软件重新呈现颜色的方式是托盘中的索引(因此0为白色,1为黄色,2为橙色,依此类推)。上面的托盘是某种类型的标准布局吗?

我最大的希望是找到.NET中内置的一个类,我可以在其中传递相同的索引号并获得颜色,但是我并不希望找到好的东西。

除了使用油漆和吸管手动绘制整个表格之外,有什么选择可以让我更容易吗?

3 个答案:

答案 0 :(得分:1)

这是一个16 x 16 = 256的调色板。旧软件可能将此调色板存储在gif-file中。您可以从此调色板构建一个十六进制值数组(硬编码或在运行时)。

第一行是“有用的” - 颜色行。

第二行到第八行的色调值从色调338°到色调335°。

第9行至第15行(7)色调和(8)色调0°,30°,60°,116°,180°,230°和300°的阴影(HSB颜色模型)。

最后一行显然是灰度。

我不认为这是标准布局。如果你想要一个准确的值,你需要使用吸管......

答案 1 :(得分:1)

我最终使用SLaks suggestion并在图像上循环并从每个方块的中心读取像素值。这是我运行的概念测试的快速证明,它将所有颜色加载到TableLayoutPanel并且它运行良好。

private void button1_Click(object sender, EventArgs e)
{
    string pngPath = @"E:\Color Pallet.png";
    tableLayoutPanel1.Controls.Clear();

    using (var bitmap = new Bitmap(pngPath))
    {
        for (int i = 0; i < 256; i++)
        {
            var color = bitmap.GetPixel(5 + (10*(i%16)), 5 + (10*(i/16)));
            tableLayoutPanel1.Controls.Add(new Panel {Dock = DockStyle.Fill, BackColor = color}, i % 16, i / 16);
        } 
    }

@SLaks,如果您发布自己的答案,我会删除我的并接受您的答案。

答案 2 :(得分:1)

您可以编写一些读取该位图的代码并检查像素,以便在您提取的位图中构建颜色调色板。