怎么在一个bmp上贴上另一个bmp怎么实现在一个大的bmp上某个位置贴上另一个小的bmp后保存为一个新的bmp呢?求解,解决了加分 [解决办法]创建内存dc1,dc2bmp1->dc1bmp2->dc2dc2->Bitblt ->dc1dc1-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); 怎么把处理完后的图片保存起来看看是否处理成功呢?
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);}