MFC如何将一个BMP拷贝到另一个BMP文件中

ELFive 2016-10-12 10:39:20
我现在有两个BMP位图文件,1.bmp和2.bmp;

假设1.bmp的大小为1920*1080,2.bmp的大小为90*90,这两个文件都不需要考虑透明度的问题;

现在我想要把2.bmp位图拷贝到1.bmp位图上(例如复制到左上角坐标(100,100)处),并输出成新的位图文件(3.bmp,大小仍然是1920*1080)

请问MFC怎么能做到,我对图像处理基本一无所知,所以最好能有一段代码参考。谢谢。
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ELFive 2016-10-15
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
使用相对路径需要 GetCurrentDirectory The GetCurrentDirectory function retrieves the current directory for the current process. DWORD GetCurrentDirectory( DWORD nBufferLength, // size, in characters, of directory buffer LPTSTR lpBuffer // pointer to buffer for current directory ); SetCurrentDirectory The SetCurrentDirectory function changes the current directory for the current process. BOOL SetCurrentDirectory( LPCTSTR lpPathName // pointer to name of new current directory );
感谢赵老师: 有时候为了方便懒得去用完整的路径,导致各种各样莫名其妙的额问题发生。
be_quiet_endeavor 2016-10-13
  • 打赏
  • 举报
回复
//先导入位图,比如ID分别为IDB_BM1 IDB_BM2 **.rc文件: IDB_BM1 BITMAP "res\\1.bmp" IDB_BM2 BITMAP "res\\2.bmp" 然后cpp文件函数: CClientDC dc(this); CBitmap bitmap1; bitmap1.LoadBitmap(IDB_BM1); CDC dcImage1; dcImage1.CreateCompatibleDC(&dc); dcImage1.SelectObject((HBITMAP)bitmap1); CBitmap bitmap2; bitmap2.LoadBitmap(IDB_BM2); CDC dcImage2; dcImage2.CreateCompatibleDC(&dc); dcImage2.SelectObject((HBITMAP)bitmap2); dcImage1.BitBlt(100, 100, 90, 90, &dcImage2, 0, 0, SRCCOPY); CImage m_image; m_image.Attach((HBITMAP)bitmap1); m_image.Save(L"保存路径.jpg");
赵4老师 2016-10-13
  • 打赏
  • 举报
回复
使用相对路径需要 GetCurrentDirectory The GetCurrentDirectory function retrieves the current directory for the current process. DWORD GetCurrentDirectory( DWORD nBufferLength, // size, in characters, of directory buffer LPTSTR lpBuffer // pointer to buffer for current directory ); SetCurrentDirectory The SetCurrentDirectory function changes the current directory for the current process. BOOL SetCurrentDirectory( LPCTSTR lpPathName // pointer to name of new current directory );
ELFive 2016-10-13
  • 打赏
  • 举报
回复
引用 1 楼 be_quiet_endeavor 的回复:
//先导入位图,比如ID分别为IDB_BM1 IDB_BM2 **.rc文件: IDB_BM1 BITMAP "res\\1.bmp" IDB_BM2 BITMAP "res\\2.bmp" 然后cpp文件函数: CClientDC dc(this); CBitmap bitmap1; bitmap1.LoadBitmap(IDB_BM1); CDC dcImage1; dcImage1.CreateCompatibleDC(&dc); dcImage1.SelectObject((HBITMAP)bitmap1); CBitmap bitmap2; bitmap2.LoadBitmap(IDB_BM2); CDC dcImage2; dcImage2.CreateCompatibleDC(&dc); dcImage2.SelectObject((HBITMAP)bitmap2); dcImage1.BitBlt(100, 100, 90, 90, &dcImage2, 0, 0, SRCCOPY); CImage m_image; m_image.Attach((HBITMAP)bitmap1); m_image.Save(L"保存路径.jpg");
这个代码确实有用,只是我也忘了说明,这这loadbitmap只能从资源中加载bitmap,我改了下代码,这样就能支持从bmp文件直接加载bitmap并实现这个功能。 有一点还值得说明的,我最后保存成bmp文件的时候,不能用相对路径,只能用绝对路径。。。不知道这个是不是之只有我一个人有这个问题。。 CClientDC dc(this); //bitmap1.LoadBitmap(L"1.bmp"); HBITMAP hBMP1 = (HBITMAP)::LoadImage(NULL, L"MainFigure.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE); CDC dcImage1; dcImage1.CreateCompatibleDC(&dc); dcImage1.SelectObject(hBMP1); //bitmap2.LoadBitmap(L"2.bmp"); HBITMAP hBMP2 = (HBITMAP)::LoadImage(NULL, L"figure.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE); CDC dcImage2; dcImage2.CreateCompatibleDC(&dc); dcImage2.SelectObject(hBMP2); dcImage1.BitBlt(100, 100, 90, 90, &dcImage2, 0, 0, SRCCOPY); CImage m_image; m_image.Attach(hBMP1); m_image.Save(L"d:\\aa.bmp");

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧