在Google上花了很多时间研究之后,我看不到一个将Wbmp图像转换为C#的Png格式的示例。
我已经从互联网上下载了一些Wbmp图像,并且正在使用Binary Editor查看它们。

有没有人有可以帮助我做到这一点的算法,或者任何代码也都可以帮助我。

到目前为止我所知道的事情:

  • 第一个字节是类型*(对于单色图像为0)
  • 第二个字节称为“固定 header ”,为0
  • 第三个字节是图像的宽度(以像素为单位)*
  • 第四字节是图像的高度(以像素为单位)*
  • 数据字节按行排列–每个像素一位:
    如果行长度不能被8整除,则该行将0填充为
    字节边界

  • 我完全迷失了,任何帮助将不胜感激

    其他一些代码:
    using System.Drawing;
    using System.IO;
    
    class GetPixel
    {
       public static void Main(string[] args)
       {
          foreach ( string s in args )
          {
             if (File.Exists(s))
             {
                var image = new Bitmap(s);
                Color p = image.GetPixel(0, 0);
                System.Console.WriteLine("R: {0} G: {1} B: {2}", p.R, p.G, p.B);
             }
          }
       }
    }
    


    class ConfigChecker
    {
       public static void Main()
       {
          string drink = "Nothing";
          try
          {
             System.Configuration.AppSettingsReader configurationAppSettings
                = new System.Configuration.AppSettingsReader();
             drink = ((string)(configurationAppSettings.GetValue("Drink", typeof(string))));
          }
          catch ( System.Exception )
          {
          }
          System.Console.WriteLine("Drink: " + drink);
       } // Main
    } // class ConfigChecker
    

    过程 :
  • 对Wbmp进行了研究
  • 打开X.wbmp首先检查详细信息
  • 找出如何找到WBMP文件的宽度和高度(以便以后可以编写代码)。请注意,转换长度字节的集合(一旦清除了MSB)的最简单方法是将实体视为base-128。
  • 看一下我更新的示例代码。
  • 我正在尝试创建一个空的Bitmap对象,并将其宽度和高度设置为我们在(3)
  • 中得出的结果
  • 对于每一个数据位,将尝试对创建的Bitmap对象执行SetPixel。
  • 当WBMP宽度不是8的倍数时,填充0。
  • 使用Save()方法保存位图。

  • 该应用程序的示例用法。假定该应用程序名为Wbmp2Png。在命令行中:
    Wbmp2Png IMG_0001.wbmp IMG_0002.wbmp IMG_0003.wbmp
    

    该应用程序将IMG_0001.wbmp,IMG_0002.wbmp和IMG_0003.wbmp中的每一个都转换为PNG文件。

    最佳答案

    这似乎可以完成工作。

    using System.Drawing;
    using System.IO;
    
    namespace wbmp2png
    {
        class Program
        {
            static void Main(string[] args)
            {
                foreach (string file in args)
                {
                    if (!File.Exists(file))
                    {
                        continue;
                    }
                    byte[] data = File.ReadAllBytes(file);
                    int width = 0;
                    int height = 0;
                    int i = 2;
                    for (; data[i] >> 7 == 1; i++)
                    {
                        width = (width << 7) | (data[i] & 0x7F);
                    }
                    width = (width << 7) | (data[i++] & 0x7F);
                    for (; data[i] >> 7 == 1; i++)
                    {
                        height = (height << 7) | (data[i] & 0x7F);
                    }
                    height = (height << 7) | (data[i++] & 0x7F);
                    int firstPixel = i;
                    Bitmap png = new Bitmap(width, height);
                    for (int y = 0; y < height; y++)
                    {
                        for (int x = 0; x < width; x++)
                        {
                            png.SetPixel(x, y, (((data[firstPixel + (x / 8) + (y * ((width - 1) / 8 + 1))] >> (7 - (x % 8))) & 1) == 1) ? Color.White : Color.Black);
                        }
                    }
                    png.Save(Path.ChangeExtension(file, "png"));
                }
            }
        }
    }
    

    10-07 20:19