在Google上花了很多时间研究之后,我看不到一个将Wbmp图像转换为C#的Png格式的示例。
我已经从互联网上下载了一些Wbmp图像,并且正在使用Binary Editor查看它们。
有没有人有可以帮助我做到这一点的算法,或者任何代码也都可以帮助我。
到目前为止我所知道的事情:
如果行长度不能被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
过程 :
该应用程序的示例用法。假定该应用程序名为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"));
}
}
}
}