读书人

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

发布时间: 2014-01-22 14:50:12 作者: rapoo

怎么在一个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获取数据,然后保存

读书人网 >VC/MFC

热点推荐