从字节数组创建位图

时间:2018-10-31 15:47:03

标签: c# arrays bitmap filestream

我正在尝试显示存储在二进制文件中的位图。

二进制文件的设置如下:

  1. 一个1024字节的标头结构。
  2. 位图图像的像素(宽度*高度*字节每像素-标头结构包含此信息)。

首先,我创建一个字节数组:

var headerArray = new byte[Marshal.SizeOf(typeof(TestClass.BMPStruct))]; //size of the struct here is 1024

然后我在文件上创建一个FileStream并首先读入标题。我从标头结构中获得位图的宽度+高度+ bytesperpixel,然后在标头后读取正确数量的字节。

然后我在这些字节上创建一个内存流,并尝试创建一个新的位图。

using (FileStream fs = new FileStream(@"C:\mydrive\testFile.onc", FileMode.Open))
{
    fs.Position = 0; //make sure the stream is at the beginning
    fs.Read(headerArray, 0, 1024); //filestream position is 1024 after this
    var headerStruct = StructsHelper.ByteArrayToStructure<TestClass.BMPStruct>(headerArray);
    int bytesperpixel = headerStruct.BitsPerPixel / 8; //headerStruct.BitsPerPixel is 8 here
    int pixelscount = headerStruct.BitmapWidth * headerStruct.BitmapHeight * bytesperpixel; //BitmapWidth = 296, BitmapHeight = 16, bytesperpixel = 1

    var imageArray = new byte[pixelscount]; //pixelscount = 4736 

    try //now read in the bitmap's bytes
    {
        fs.Read(imageArray, 0, pixelscount); //filestream position is 5760 after this line
    }
    catch (Exception ex)
    {
    }

    Bitmap bmp;
    using (var ms = new MemoryStream(imageArray))
    {
        try
        {
            bmp = new Bitmap(ms); //error thrown here Exception thrown: 'System.ArgumentException' in System.Drawing.dll
            //Parameter is not valid
        }
        catch (Exception ex)
        {
        }
    }
}

在行bmp = new Bitmap(ms)上,我得到了System.ArgumentException in System.Drawing.dll。我的try / catch显示一个Parameter is not valid.异常。

我在该站点上还看到了其他一些问题,但都出现了相同的错误,但是没有一个解决方案能解决我所看到的问题。

0 个答案:

没有答案