MFC单文档显示位图
我用的是vs2010CBitmapbmp;CDCdcc;CClientDCdc(this);bmp.LoadBitmapA(IDB_BITMAP1);dcc.Create...
我用的是vs2010
CBitmap bmp;
CDC dcc;
CClientDC dc(this);
bmp.LoadBitmapA(IDB_BITMAP1);
dcc.CreateCompatibleDC(&dc);
dcc.SelectObject(&bmp);
dc.BitBlt(0,0,3000,3000,&dcc,0,0,SRCCOPY);
这是我的代码,放在ondraw()里能正常显示图片,但是放在onprint()函数里就显示空白什么也没有,这是怎么回事,难道onprint()不能显示??? 展开
CBitmap bmp;
CDC dcc;
CClientDC dc(this);
bmp.LoadBitmapA(IDB_BITMAP1);
dcc.CreateCompatibleDC(&dc);
dcc.SelectObject(&bmp);
dc.BitBlt(0,0,3000,3000,&dcc,0,0,SRCCOPY);
这是我的代码,放在ondraw()里能正常显示图片,但是放在onprint()函数里就显示空白什么也没有,这是怎么回事,难道onprint()不能显示??? 展开
展开全部
假设你的这三张图分别存储在下面三组变量中:
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);
}
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);
}
logo在线生成器
2024-10-23 广告
2024-10-23 广告
燕雀零一专业logo生成器,是一家科技型的设计公司,团队深耕企业品牌设计服务已有十余年,已助力多家企业塑造其品牌形象及体验,服务内容含:LOGO设计/VI设计/产品包装设计/导视店面门头及空间设计,吉祥物设计/海报设计等。 我们的目标是帮助...
点击进入详情页
本回答由logo在线生成器提供
展开全部
onprint()函数是自定义的吗,通过什么调用这个函数的 ?
你可以尝试获取view类的指针之后 使用view类的GetDC()获取设备环境 替换掉CClientDC dc(this);这个
你可以尝试获取view类的指针之后 使用view类的GetDC()获取设备环境 替换掉CClientDC dc(this);这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-07-21
展开全部
假设你的这三张图分别存储在下面三组变量中:
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);
}
另外,团IDC网上有许多产品团购,便宜有口碑
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);
}
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询