用纯C保存bmp位图?

vivian926 2007-01-21 05:30:16
请问如何用纯C将图片保存成bmp文件?
多谢各位大侠指教!
...全文
978 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmu_才盛 2011-05-01
  • 打赏
  • 举报
回复
不知道位图的格式, 所以只能帮你顶了。。
qq515383106 2011-05-01
  • 打赏
  • 举报
回复
我要358732727@qq.com
liahr 2010-07-14
  • 打赏
  • 举报
回复
你应该去查一下bmp的文件格式
xushuai0794 2010-07-14
  • 打赏
  • 举报
回复
我有这程序,告诉我你邮箱,我发给你。。。
sugar65 2010-07-13
  • 打赏
  • 举报
回复
几年了??还没解决??
herman~~ 2010-07-13
  • 打赏
  • 举报
回复
mark
wesweeky 2010-07-13
  • 打赏
  • 举报
回复
。每天回复
w_volove 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 wsy6634 的回复:]

http://hi.baidu.com/wsy6634/blog/item/00fb1cfbd5b12515a9d31171.html
[/Quote]


留个记号~~
wsy6634 2010-07-13
  • 打赏
  • 举报
回复
http://hi.baidu.com/wsy6634/blog/item/00fb1cfbd5b12515a9d31171.html
kenneth_lueng 2007-01-23
  • 打赏
  • 举报
回复
先看明白BMP圖的協議,然後你就知道怎麼做了
gemo 2007-01-23
  • 打赏
  • 举报
回复
case WM_CREATE:
{
HDC hWndDC = ::GetDC(hWnd);
hMemDC = ::CreateCompatibleDC(hWndDC);

int nScreenX = ::GetSystemMetrics(SM_CXSCREEN);
int nScreenY = ::GetSystemMetrics(SM_CYSCREEN);
hMemBmp = ::CreateCompatibleBitmap(hWndDC, nScreenX, nScreenY);

::ReleaseDC(hWnd, hWndDC);

SelectObject(hMemDC, hMemBmp);

::PatBlt(hMemDC, 0, 0, nScreenX, nScreenY, WHITENESS);
}
gemo 2007-01-23
  • 打赏
  • 举报
回复
void SaveBmp(const char* filename, HDC hDC, HBITMAP hBmp)
{
FILE* fp = fopen(filename, "wb");

BITMAPFILEHEADER bfh;
memset(&bfh, 0, sizeof(bfh));
bfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +
1024 * 768 * 3;
bfh.bfType = MAKEWORD('B', 'M');
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

fwrite(&bfh, sizeof(bfh), 1, fp);

BITMAPINFOHEADER bih;
memset(&bih, 0, sizeof(bih));
bih.biSize = sizeof(bih);
bih.biBitCount = 24;
bih.biWidth = 1024;
bih.biHeight = 768;
bih.biCompression = BI_RGB;
bih.biPlanes = 1;

fwrite(&bih, sizeof(bih), 1, fp);

char* lpDibits = new char[1024*768*4];
memset(lpDibits, 0, 1024*768*4);

int iRet = ::GetDIBits(hDC, hBmp, 0, 768,
lpDibits, (BITMAPINFO *)&bih, DIB_RGB_COLORS);
fwrite(lpDibits, 1024*768*3, 1, fp);

delete [] lpDibits;

fclose(fp);

}
vivian926 2007-01-22
  • 打赏
  • 举报
回复
C++
我的意思是不用MFC
对不起哦。。
vivian926 2007-01-22
  • 打赏
  • 举报
回复
貌似有很多报错啊。。
wwwhaichun 2007-01-22
  • 打赏
  • 举报
回复
#include <fstream>

用纯C怎么又用到fstream的东西了呢?
vivian926 2007-01-22
  • 打赏
  • 举报
回复
我的是一个win32 application工程,头文件和cpp文件都是c++的,
#include <fstream.h>
#include <iostream.h>
以后加入
BITMAPFILEHEADERbfh;
BITMAPINFOHEADERbih;
fstream file;
然后在“保存”按钮的消息处理里加入
file.open( strName,ios::nocreate|ios::in|ios::binary );
if( !file ) return;
file.read( (char*)&bfh, sizeof(bfh) );
file.read( (char*)&bih, sizeof(bih) );
data = new BYTE[bih.biWidth*bih.biHeight*3];
file.read( (char*)data, bih.biWidth*bih.biHeight*3 );
file.close();

delete[] data;
就可以了吗
Mypiger 2007-01-22
  • 打赏
  • 举报
回复
#include <fstream.h>
vivian926 2007-01-22
  • 打赏
  • 举报
回复
我大概是有什么头文件没有加,加了这几句
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
BYTE *data;
fstream file;
以后有这样的错误:

drawer.cpp(12) : error C2079: 'file' uses undefined class 'basic_fstream<char,struct std::char_traits<char> >'
vivian926 2007-01-22
  • 打赏
  • 举报
回复
笨笨地问一下,fstream是什么类型?
argenCHN 2007-01-22
  • 打赏
  • 举报
回复
up
加载更多回复(16)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧