【问题标题】:Is this a standard color palette?这是标准调色板吗?
【发布时间】:2013-05-04 06:19:17
【问题描述】:

我正在对一个程序进行一些逆向工程。我试图从旧数据中提取的一件事是从下面的调色板中选择的颜色

旧软件引用颜色的方式是通过托盘中的索引(所以 0 是白色,1 是黄色,2 是橙色,等等)。上面的托盘是某种类型的标准布局吗?

我最大的希望是找到一些内置于 .NET 的类,我可以在其中传递相同的索引号并取回颜色,但是我对找到这么好的东西并不抱太大希望。

除了使用油漆和吸管手动绘制整个表格之外,还有什么选项可以让我更轻松地完成这项工作吗?

【问题讨论】:

  • 您可以编写一些代码来读取该位图并检查像素以构建调色板。
  • 非常好的主意,5 + (10 * (i % 16))5 + (10 * (i / 16)) 会给我每个正方形的中心(在我将其裁剪为 160x160 像素之后),将其发布为答案,我会投票赞成(如果没有其他事情发生,也会接受)
  • 不是。常用的 Windows 调色板在开头有 10 种固定颜色,在结尾有 10 种。当然,对 256 种颜色进行分组的方法几乎是无限的。使用 Image.Palette 属性。
  • 太糟糕了 StackOverflow 不鼓励进行琐碎的编辑...这个标题...啊!
  • @redtuna 告诉我你认为更好的标题是什么,我会改变它。

标签: c# colors reverse-engineering


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    第 2 行到第 8 行将色相值从 338° 色相转换为 335° 色相。

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

    最后一行显然是灰度。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 2011-09-08
        相关资源
        最近更新 更多