保存位图?

clxye 2007-10-31 10:07:07
为什么我下面的代码保存的位图漆黑一片?


void CBitmapDlg::OnBtnBitmap()
{
// TODO: Add your control notification handler code here
CClientDC dc( this );
CDC dcMem;
CRect rect;
GetClientRect( &rect );

// 位图文件头
BITMAPFILEHEADER bmfh;

// 位图信息头
BITMAPINFO bmih;
BYTE *pBytes;

bmih.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
bmih.bmiHeader.biWidth = rect.Width();
bmih.bmiHeader.biHeight = rect.Height();
bmih.bmiHeader.biPlanes = 1;
bmih.bmiHeader.biBitCount = 16;
bmih.bmiHeader.biCompression = BI_RGB;
bmih.bmiHeader.biSizeImage = 0;
bmih.bmiHeader.biXPelsPerMeter = 0;
bmih.bmiHeader.biYPelsPerMeter = 0;
bmih.bmiHeader.biClrUsed = 0;
bmih.bmiHeader.biClrImportant = NULL;

bmfh.bfType = 0x4d42;
bmfh.bfSize = ( DWORD )( sizeof( BITMAPFILEHEADER ) + bmih.bmiHeader.biSize + bmih.bmiHeader.biClrUsed * sizeof( RGBQUAD ) + bmih.bmiHeader.biSizeImage);
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = ( DWORD )( sizeof( BITMAPFILEHEADER ) + bmih.bmiHeader.biSize + bmih.bmiHeader.biClrUsed * sizeof( RGBQUAD ) );

dcMem.CreateCompatibleDC( &dc );
dcMem.SetBkMode( TRANSPARENT );
dcMem.MoveTo( 0, 0 );
dcMem.LineTo( 100, 100 );

CreateDIBSection( dcMem.m_hDC, &bmih, DIB_PAL_COLORS, ( void** )&pBytes, NULL, 0 );

CFile file;
if( file.Open( "c:\\Test.bmp", CFile::modeWrite | CFile::modeCreate ) )
{
file.Write( &bmfh, sizeof( BITMAPFILEHEADER ) );
file.Write( &bmih, bmih.bmiHeader.biSize + bmih.bmiHeader.biClrUsed * sizeof( RGBQUAD ) + bmih.bmiHeader.biSizeImage );
file.Write( pBytes, rect.Width() * rect.Height() * 16 / 8 );
file.Close();
}
dcMem.DeleteDC();
}
...全文
93 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
clxye 2007-10-31
  • 打赏
  • 举报
回复
嗯,非常感谢!!
凤矶 2007-10-31
  • 打赏
  • 举报
回复
透明的?
位图的每一们必须有颜色
你可以在画之前先用白刷子把MEMDC刷白
clxye 2007-10-31
  • 打赏
  • 举报
回复
谢谢,果然出现了。
最后一个问题,完了马上结帖。
为什么背景依然是黑色的呢?如何让它为透明的?

凤矶 2007-10-31
  • 打赏
  • 举报
回复
先建一幅位图,选入MEMDC,再画
clxye 2007-10-31
  • 打赏
  • 举报
回复
好像不是这个问题,我刚才把画笔设成红色依然没有。
而且我代码中已经把背景设成透明了。我对位图的保存也不太了解,概念比较模糊,很有可能在保存的步骤上就出了问题,而且写文件时的字节数等我也不清楚对不对。

请大家指导一下,谢谢!!
凤矶 2007-10-31
  • 打赏
  • 举报
回复
画时没选画笔,默认为黑色

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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