Я недавно работал над процессором изображений и решил взглянуть на старый формат файла XBitmap (XBM).Я работаю в C #, чтобы скопировать данные пикселей из этих файлов в растровое изображение.Мне удалось настроить и алгоритм, который, кажется, работает в теории, но не отображается правильно.Для тех, кто не знает, XBM - это файл ACSII C, который содержит массив байтов и отображает монохромные данные.Ниже приведен мой алгоритм, поэтому, если кто-нибудь сможет указать мне правильное направление, я буду очень счастлив.
Извините, это немного дословно, но это весь декодер:
string input = File.ReadAllText(fname);
using (StreamReader r = new StreamReader(fname))
{
int i = input.IndexOf('{');
string bytes = input.Substring(i+1);
int j = bytes.IndexOf('}');
bytes = bytes.Remove(j-1);
string[] StringArray = bytes.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
byte[] pixels = new byte[StringArray.Length];
for (int k = 0; k < StringArray.Length; k++)
{
byte result;
StringArray[k] = StringArray[k].Replace("0x", "");
StringArray[k] = StringArray[k].Replace("\r", "");
StringArray[k] = StringArray[k].Replace("\n", "");
StringArray[k] = StringArray[k].Trim();
bool result1 = byte.TryParse(StringArray[k], NumberStyles.HexNumber, CultureInfo.CurrentCulture, out result);
if (result1)
pixels[k] = result;
else
throw new Exception();
}
xBits = System.Runtime.InteropServices.Marshal.AllocHGlobal(pixels.Length);
System.Runtime.InteropServices.Marshal.Copy(pixels, 0, xBits, pixels.Length);
}
return xBits;