保存位图?

clxye clxye 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
为什么我下面的代码保存的位图漆黑一片?


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();
}
...全文
评论 6
收藏 已收藏
分享
返回顶部
clxye
界面 15,976 成员 115,866 内容