2013-05-09 25 views
0

我正在做一些程序的逆向工程工作。其中一件事我试图拔出旧的数据是从下面的颜色选择彩色调色板这是一个标准的调色板吗?

enter image description here

旧软件refrencing颜色的方式是通过在托盘上的指数(所以0是白色的,1是黄色的,2是橙色的,等等)。上述托盘是某种类型的标准布局吗?

我最大的希望是找到一些内置于.NET的类,我可以传递相同的索引号并获取颜色,但是我没有很高的期望去寻找好的东西。

除了使用油漆和吸管手动绘制出整个桌子有没有任何选项可以让我更容易?

+1

您可以编写一些读取该位图的代码并检查像素以构建调色板。 – SLaks 2013-05-09 17:22:27

+0

非常好的主意,'5 +(10 *(i%16))','5 +(10 *(i/16))'会给我每个正方形的中心(在裁剪到160x160像素之后)张贴作为答案,我会投票它(并会接受它,如果没有其他人一起沿) – 2013-05-09 17:27:24

+0

它不是。库存Windows调色板在开始时有10种固定颜色,在末尾有10种。当然,有256种颜色的组合方式无限。使用Image.Palette属性。 – 2013-05-09 18:23:28

回答

1

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

1

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

第一行是“有用的”彩色行。

第2行至第8行将色调值从色相338°移动到色相335°。

第9行到第15行显示色调0°,30°,60°,116°,180°,230°和300°的色调和(8)色调(HSB色彩模型)。

最后一行显然是灰度。

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

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,如果你发布你自己的答案我会删除我的并接受你的。

+1

不要删除你的答案;它有有用的代码。 – SLaks 2013-05-09 18:36:34

相关问题