首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何在一个bmp上贴上另一个bmp

2014-01-22 
怎么在一个bmp上贴上另一个bmp怎么实现在一个大的bmp上某个位置贴上另一个小的bmp后保存为一个新的bmp呢?

怎么在一个bmp上贴上另一个bmp
怎么实现在一个大的bmp上某个位置贴上另一个小的bmp后保存为一个新的bmp呢?求解,解决了加分
[解决办法]
创建内存dc1,dc2
bmp1->dc1
bmp2->dc2
dc2->Bitblt ->dc1
dc1-Bitblt ->窗口dc

[解决办法]

引用:
Quote: 引用:

void CTransparentBltDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CBitmap bmpBall,bmpBkgnd;
bmpBall.LoadBitmap(IDB_FOOTBALL);
bmpBkgnd.LoadBitmap(IDB_BKGND);

CDC*pDC=GetDC();
HDC hThisDC=pDC->GetSafeHdc();
HDC hBkDC=CreateCompatibleDC(hThisDC);
HBITMAP hOldBkBmp=(HBITMAP)SelectObject(hBkDC,bmpBkgnd.GetSafeHandle());
HDC hBallDC=CreateCompatibleDC(hThisDC);
HBITMAP hOldBallBmp=(HBITMAP)SelectObject(hBallDC,bmpBall.GetSafeHandle());
BITMAP bmp;
GetObject(bmpBall.GetSafeHandle(),sizeof(BITMAP),&bmp);

int xPos=30;
int yPos=30;
BitBlt(hBkDC,xPos,yPos,bmp.bmWidth,bmp.bmHeight,hBallDC,0,0,SRCCOPY);

xPos=40;
yPos=40;
GetObject(bmpBkgnd.GetSafeHandle(),sizeof(BITMAP),&bmp);
BitBlt(hThisDC,xPos,yPos,bmp.bmWidth,bmp.bmHeight,hBkDC,0,0,SRCCOPY);

SelectObject(hBallDC,hOldBallBmp);
DeleteDC(hBallDC);
SelectObject(hBkDC,hOldBkBmp);
DeleteDC(hBkDC);
ReleaseDC(pDC);
}


还在吗?帮我看看我改的代码吧?
HBITMAP bmpball,bmpBk;  
bmpball = (HBITMAP)LoadImage( NULL, _T("D:\\1.bmp"), IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION 
[解决办法]
 LR_DEFAULTSIZE 
[解决办法]
 LR_LOADFROMFILE );
int t=GetLastError();
bmpBk = (HBITMAP)LoadImage( NULL, _T("D:\\ticket.bmp"), IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION 
[解决办法]
 LR_DEFAULTSIZE 
[解决办法]
 LR_LOADFROMFILE );int s=GetLastError();
CBitmap   bmpBkgnd,bmpBall;   
bmpBkgnd.Attach(bmpBk); 
bmpBall.Attach(bmpball); 
/*bmpBall.LoadBitmap(IDB_FOOTBALL);  
bmpBkgnd.LoadBitmap(IDB_BKGND); */ 
HDC pDC = ::GetDC(AfxGetMainWnd()->m_hWnd);
//CDC*pDC=GetDC();   
HDC hThisDC=CDC::FromHandle(pDC)->GetSafeHdc();  
HDC hBkDC=CreateCompatibleDC(hThisDC); 
HBITMAP hOldBkBmp=(HBITMAP)SelectObject(hBkDC,bmpBkgnd.GetSafeHandle());  
HDC hBallDC=CreateCompatibleDC(hThisDC);   
HBITMAP hOldBallBmp=(HBITMAP)SelectObject(hBallDC,bmpBall.GetSafeHandle());   
BITMAP bmp;    
GetObject(bmpBall.GetSafeHandle(),sizeof(BITMAP),&bmp);      
int xPos=30;  
int yPos=30;   
BitBlt(hBkDC,xPos,yPos,bmp.bmWidth,bmp.bmHeight,hBallDC,0,0,SRCCOPY);   
xPos=40; 
yPos=40;    
GetObject(bmpBkgnd.GetSafeHandle(),sizeof(BITMAP),&bmp);  
BitBlt(hThisDC,xPos,yPos,bmp.bmWidth,bmp.bmHeight,hBkDC,0,0,SRCCOPY);   //对于我的需求这一部分是否必要? 
SelectObject(hBallDC,hOldBallBmp);    
DeleteDC(hBallDC);    
SelectObject(hBkDC,hOldBkBmp); 
DeleteDC(hBkDC);
ReleaseDC(NULL,pDC); 
怎么把处理完后的图片保存起来看看是否处理成功呢?



你要的保存,红色代码不需要,你i可以从内存dc获取数据,然后保存

热点排行