MFC如何在单文档同一横坐标显示多幅位图

譬如(0,0)显示bmp1(0,10)显示bmp2(0,20)显示bmp3... 譬如
(0,0)显示bmp1
(0,10)显示bmp2
(0,20)显示bmp3
展开
 我来答
wise_111
推荐于2016-02-25 · TA获得超过892个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:356万
展开全部
假设你的这三张图分别存储在下面三组变量中:
bmp1:
LPBITMAPINFO bmi1;
LPBYTE pBits;

bmp2:
LPBITMAPINFO bmi2;
LPBYTE pBits2;

bmp3:
LPBITMAPINFO bmi3;
LPBYTE pBits3;
至于怎么存储在这三个结构中,你可以参考如下代码(不过这段代码不是解决你问题的关键):
BOOL CBmp::Read(CString FileName)
{
CFile file;
BITMAPFILEHEADER bmfh;

//打开文件
if(!file.Open(FileName,CFile::modeRead))
{
AfxMessageBox("File cannot open!");
return FALSE;
}

//读文件信息头
file.Read( (LPVOID)&bmfh, sizeof(bmfh) );
if(bmfh.bfType != 0x4d42)
{
AfxMessageBox("This is not a bmp file!");
return FALSE;
}

if(bmi)
{
delete bmi;
bmi = NULL;
}
if(pBits)
{
delete pBits;
pBits = NULL;
}

//读位图信息头和调色板
int infoSize = bmfh.bfOffBits - sizeof(bmfh);
bmi = (LPBITMAPINFO)new BYTE[infoSize];
file.Read( (LPVOID)bmi, infoSize);
if(bmi->bmiHeader.biBitCount!=1 && bmi->bmiHeader.biBitCount!=4
&& bmi->bmiHeader.biBitCount!=8 && bmi->bmiHeader.biBitCount!=24)
{
AfxMessageBox("The number of colors is not valid!");
return FALSE;
}

//读图像数据
pBits = new BYTE[bmi->bmiHeader.biSizeImage];
file.Read( (LPVOID)pBits, bmi->bmiHeader.biSizeImage);

return TRUE;
}

你的问题关键用一个函数:StretchDIBits

在你的视图类的OnDraw函数中,添加如下代码即可:

if(bmi1 && pBits1)
{
::StretchDIBits(pDC->GetSafeHdc(),0,0,bmi1->bmiHeader.biWidth,bmi1->bmiHeader.biHeight,\
0,0,bmi1->bmiHeader.biWidth,bmi1->bmiHeader.biHeight,\
pBits1,bmi1,DIB_RGB_COLORS,SRCCOPY);
}

if(bmi2 && pBits2)
{
::StretchDIBits(pDC->GetSafeHdc(),0,10,bmi2->bmiHeader.biWidth,bmi2->bmiHeader.biHeight,\
0,0,bmi2->bmiHeader.biWidth,bmi2->bmiHeader.biHeight,\
pBits2,bmi2,DIB_RGB_COLORS,SRCCOPY);
}

if(bmi3 && pBits3)
{
::StretchDIBits(pDC->GetSafeHdc(),0,20,bmi3->bmiHeader.biWidth,bmi3->bmiHeader.biHeight,\
0,0,bmi3->bmiHeader.biWidth,bmi3->bmiHeader.biHeight,\
pBits3,bmi3,DIB_RGB_COLORS,SRCCOPY);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
保晏然2Q
2010-04-20 · TA获得超过1053个赞
知道小有建树答主
回答量:422
采纳率:0%
帮助的人:523万
展开全部
CDC* pDC=GetDC();
CDC mdc;
mdc.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
BITMAP Bmp;
GetObject(bmp.m_hObject,sizeof(BITMAP), (LPSTR)&Bmp);
mdc.SelectObject(&bmp);
pDC->BitBlt(0,0,Bmp.bmWidth,Bmp.bmHeight,&mdc,0,0,SRCCOPY);
bmp.DeleteObject();

bmp.LoadBitmap(IDB_BITMAP2);
GetObject(bmp.m_hObject,sizeof(BITMAP), (LPSTR)&Bmp);
mdc.SelectObject(&bmp);
pDC->BitBlt(0,10,Bmp.bmWidth,Bmp.bmHeight,&mdc,0,0,SRCCOPY);
bmp.DeleteObject();

第三个类似
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式