怎样把大于屏幕的位图保存下来

zyk100 2003-08-20 08:34:41
请问怎么样把大于屏幕的位图保存下来,我试了几都都只能处理客户处的图象
...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyk100 2003-08-20
  • 打赏
  • 举报
回复
就是这幅图显示在屏幕上有很多部分已经超出了屏幕
mct1025 2003-08-20
  • 打赏
  • 举报
回复
大于屏幕的位图 是什么?

来自文件,还是整个屏幕?
zyk100 2003-08-20
  • 打赏
  • 举报
回复
大哥,关键就是怎么把视图上的整个位图保存到内存DC上,我试了好几种都只能把客户区上的内容COPY到内存DC上
mct1025 2003-08-20
  • 打赏
  • 举报
回复
建立一个内存DC,用来保存整个位图

保存时使用内存DC,不要使用视图的DC
mct1025 2003-08-20
  • 打赏
  • 举报
回复
建立一个内存DC,来保存整个位图

保存时使用内存DC,不要使用视图的DC
RouYing76 2003-08-20
  • 打赏
  • 举报
回复
必须使用内存DC;
参看下列代码,其中的细节请查阅MSDN;
//为CreateDIBSection()准备
//dcSave变量在此为已经创建的内存DC
//saveRect变量在此为要画的范围
LPBITMAPINFO lpbmi = NULL;
LPBYTE lpBits;
HBITMAP hSaveBitmap, hOldBitmap;
// Allocate and fill out a BITMAPINFO struct for the new DIB
// Allow enough room for a 256-entry color table, just in case
lpbmi = ( BITMAPINFO * )::malloc( sizeof( BITMAPINFO ) );
::memset( lpbmi, 0, sizeof( BITMAPINFO ) );
lpbmi->bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
lpbmi->bmiHeader.biWidth = saveRect.Width();
lpbmi->bmiHeader.biHeight = saveRect.Height();
lpbmi->bmiHeader.biPlanes = 1;
lpbmi->bmiHeader.biBitCount = 32;
lpbmi->bmiHeader.biCompression = BI_RGB;
lpbmi->bmiHeader.biSizeImage = 0;
lpbmi->bmiHeader.biXPelsPerMeter= 0;
lpbmi->bmiHeader.biYPelsPerMeter= 0;
lpbmi->bmiHeader.biClrUsed = 0;
lpbmi->bmiHeader.biClrImportant = 0;
//创建DIBs句柄
hSaveBitmap = ::CreateDIBSection( dcSave.GetSafeHdc(),
lpbmi,
DIB_RGB_COLORS,
( void ** )&lpBits,
NULL,
0);
hOldBitmap = (HBITMAP)::SelectObject( dcSave.GetSafeHdc(), hSaveBitmap);
//画
/********
//清屏白色
dcSave.PatBlt(0,0,saveRect.Width(),saveRect.Height(),WHITENESS);
//使用此dcSave画出需要
**********/
BITMAPFILEHEADER bfh;
bfh.bfType = 0x4d42;
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bfh.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );
bfh.bfSize = bfh.bfOffBits + lpbmi->bmiHeader.biHeight * lpbmi->bmiHeader.biWidth * 4;

lpbmi->bmiHeader.biSizeImage = lpbmi->bmiHeader.biHeight * lpbmi->bmiHeader.biWidth * 4;
//设置分辨率
lpbmi->bmiHeader.biXPelsPerMeter = ( LONG )( (nResolution / 2.54 ) * 100 );
lpbmi->bmiHeader.biYPelsPerMeter = ( LONG )( (nResolution / 2.54 ) * 100 );

FILE * pFile = ::fopen( strFileName, "wb");
fwrite( &bfh, sizeof( BITMAPFILEHEADER ), 1, pFile);
fwrite( lpbmi, sizeof( BITMAPINFOHEADER ), 1, pFile);
fwrite( lpBits, lpbmi->bmiHeader.biSizeImage, 1, pFile);
fclose( pFile);

::SelectObject( dcSave.GetSafeHdc(), hOldBitmap);
::DeleteObject( hSaveBitmap);
::free( lpbmi);

19,468

社区成员

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

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