位图生成C代码

jdy0803

成员
已加入
2013年5月20日
留言内容
17
编程经验
10+
我有一个C代码,可以像这样创建位图。


长SaveBmpFile(LPCTSTR文件名,BYTE * ImageBitmap,DWORD BitmapByteCount,长宽度,长高度)
{
文件* fp;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
DWORD dwBitmapByteCountPerLine;
DWORD dwBitmapByteCount;


dwBitmapByteCountPerLine =(宽度* 3 + 3)& (~3);
// Windows位图要求每行边界为32位
dwBitmapByteCount =高度* dwBitmapByteCountPerLine;


bfh.bfType = 0x4d42;
bfh.bfSize = BitmapByteCount + sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER);
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bfh.bfOffBits = sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER);


bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth =宽度;
bih.biHeight =高度;
bih.biPlanes = 1;
bih.biBitCount = 24;
bih.biCompression = BI_RGB;
bih.biSizeImage = 0;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
fp = fopen(文件名,"wb");
如果(!fp)
{
返回-1;
}
//制作位图数据
BYTE * bp = ImageBitmap;
fwrite(&bfh.bfType,1,sizeof(BITMAPFILEHEADER),fp);
fwrite(&bih.biSize,1,sizeof(BITMAPINFOHEADER),fp);
fwrite(bp, 1, dwBitmapByteCount, fp);
fclose(fp);
返回0;
}
是否有C#的BITMAPFILEHEADER等效类?还是自己定义?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,535
地点
悉尼,澳大利亚
编程经验
10+
该类型将定义为Windows API的一部分。即使在C#中使用Windows API时,也必须定义要使用的所有非托管类型和函数的托管版本。简而言之,请自行定义。
 

jdy0803

成员
已加入
2013年5月20日
留言内容
17
编程经验
10+
是的,我很懒,我会尝试网络搜索。

我声明了结构。
接下来,我应该写入文件。
相当于fwrite的C#是BinaryWriter吗?或BinaryFormatter?
我正在尝试这样。
使用(BinaryWriter writer = new BinaryWriter(File.Open(filename,FileMode.Create)))
{
writer.Write(???);
writer.Write(???);
}

但是我不知道如何通过结构。
在C#中,结构是值类型,而不是引用。
如何传递指针writer.Write方法?
 
Last edited:
最佳 底部