我试图显示一个位图,它存储在一个二进制文件中。
二进制文件的设置如下:
-
1024字节的头结构。
-
位图图像的像素(宽度*高度*字节像素-头结构包含此信息)。
首先,我创建一个字节数组:
var headerArray = new byte[Marshal.SizeOf(typeof(TestClass.BMPStruct))];
然后我创建一个
FileStream
在文件上,首先读取头。我从header结构中得到位图的宽度+高度+字节像素,然后在header之后读取正确的字节数。
然后在这些字节上创建一个内存流,并尝试创建一个新的位图。
using (FileStream fs = new FileStream(@"C:\mydrive\testFile.onc", FileMode.Open))
{
fs.Position = 0;
fs.Read(headerArray, 0, 1024);
var headerStruct = StructsHelper.ByteArrayToStructure<TestClass.BMPStruct>(headerArray);
int bytesperpixel = headerStruct.BitsPerPixel / 8;
int pixelscount = headerStruct.BitmapWidth * headerStruct.BitmapHeight * bytesperpixel;
var imageArray = new byte[pixelscount];
try
{
fs.Read(imageArray, 0, pixelscount);
}
catch (Exception ex)
{
}
Bitmap bmp;
using (var ms = new MemoryStream(imageArray))
{
try
{
bmp = new Bitmap(ms);
}
catch (Exception ex)
{
}
}
}
在线
bmp = new Bitmap(ms)
,我得到一个
System.ArgumentException in System.Drawing.dll
. 我的尝试/捕捉显示
Parameter is not valid.
例外。
我在这个网站上看到了一些其他的问题,也有同样的错误,但是没有一个解决方案能像我看到的那样奏效。