2011-01-27 51 views
1

我发现,当我使用格式为ImageFormat.Bmp的Bitmap.Save方法时,文件中的位图标题信息在biSizeImage字段中为零。将位图保存为文件在图像大小字段中为零

从我可以看到这是确定的根据规格,但不幸的是我勉强嵌入式设备,我不得不坚持要设置正确。

所以问题是如何得到这个标题信息字段总是设置位图保存时?

回答

3

如您怀疑的那样,该问题是0对于RGB位图的图像大小字段而言是完全允许的值。该MSDN documentationBITMAPINFOHEADER结构证实了这样一个事实:

biSizeImage
的大小,以字节为单位的图像。对于BI_RGB位图,这可能设置为零。

如果biCompressionBI_JPEGBI_PNG或,biSizeImage分别表示JPEG或PNG图像缓冲区的大小。

因此,.NET框架中的实现仅仅是以标准的,文档化的方式进行操作。由于您需要别的东西,您必须自己处理保存到文件过程,这将允许您手动修改BITMAPINFOHEADER结构的biSizeImage成员。

一个非常全面的例子可以在这里找到:Saving a Control Image to a Bitmap File。当然,它是为Compact Framework编写的,但大多数单个组件仍然适用。您需要从Windows API调用几个函数(请参阅www.pinvoke.net了解定义),并使用DC。

将绘图带到您自己的手中可能会更快,因为您使用的是GDI子系统,而不是GDI +。关于这种通用方法的文章可以在这里找到:1bpp in C#,它似乎也展示了用BITMAPINFOHEADER结构体来处理自己手中的事情。

如果您了解非托管C++代码,可以在这里找到一个教程,可以让您了解在C#中要实现的功能:Loading and Saving Bitmaps。正如你所看到的那样,所需的代码真的不会那么长,尽管仍然比一行Bitmap.Save方法多。

+0

好的,谢谢,我希望避免拼贴,但它看起来像唯一的方法。 – user380689 2011-01-27 21:52:53