Цель моей программы это открыть файл формата bmp(а в дальнейшем и моего кастомного формата) и вывести на экран, в чем моя ошибка, что я могу почитать на эту тему?
namespace mSystem
{
public struct FileHeader
{
public ushort bfType;
public uint bfSize;
public ushort bfReserved1;
public ushort bfReserved2;
public uint bfOffBits;
}
public struct InfoHeader
{
public uint biSize;
public int biWidth;
public int biHeight;
public ushort biPlanes;
public ushort biBitCount;
public uint biCompression;
public uint biSizeImage;
public int biXPelsPerMeter;
public int biYPelsPerMeter;
public uint biClrUsed;
public uint biClrImportant;
}
public struct Color
{
public byte blue;
public byte green;
public byte red;
}
internal class ImageOperation
{
public Color[] srcImage;
public Color[] dstImage;
public int width;
public int height;
public int pixelSize;
FileHeader fileHeader = new FileHeader();
InfoHeader infoHeader = new InfoHeader();
public byte[] OpenFile(string filepath)
{
using (var file = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
var reader = new BinaryReader(file);
fileHeader.bfType = reader.ReadUInt16();
fileHeader.bfSize = reader.ReadUInt32();
fileHeader.bfReserved1 = reader.ReadUInt16();
fileHeader.bfReserved2 = reader.ReadUInt16();
fileHeader.bfOffBits = reader.ReadUInt32();
infoHeader.biSize = reader.ReadUInt32();
infoHeader.biWidth = reader.ReadInt32();
infoHeader.biHeight = reader.ReadInt32();
infoHeader.biPlanes = reader.ReadUInt16();
infoHeader.biBitCount = reader.ReadUInt16();
infoHeader.biCompression = reader.ReadUInt32();
infoHeader.biSizeImage = reader.ReadUInt32();
infoHeader.biXPelsPerMeter = reader.ReadInt32();
infoHeader.biYPelsPerMeter = reader.ReadInt32();
infoHeader.biClrUsed = reader.ReadUInt32();
infoHeader.biClrImportant = reader.ReadUInt32();
width = infoHeader.biWidth;
height = infoHeader.biHeight;
srcImage = new Color[width * height];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
srcImage[i * width + j].blue = reader.ReadByte();
srcImage[i * width + j].green = reader.ReadByte();
srcImage[i * width + j].red = reader.ReadByte();
}
}
byte[] byteArray = new byte[srcImage.Length * 3];
int index = 0;
foreach (Color color in srcImage)
{
byteArray[index++] = color.red;
byteArray[index++] = color.green;
byteArray[index++] = color.blue;
}
return byteArray;
}
}
}
}
private void OpenNewFile_Click(object sender, RoutedEventArgs e)
{
var ofd = new OpenFileDialog();
ofd.Filter = "Image files (*.bmp;*.vmv)|*.bmp;*.vmv|All files (*.*)|*.*";
if (ofd.ShowDialog() == true)
{
filePath = ofd.FileName;
var imageOperation = new ImageOperation();
byte[] imageBytes = imageOperation.OpenFile(filePath);
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = new MemoryStream(imageBytes);
bitmapImage.EndInit(); //исключение тут
}
}