VC/MFC 如何让一张图片文件放大缩小呢。比如图片的分辨率是1024*768的,然后将它成了分辨率改为300*300
或者把它设成3000*4000的。图片是否失真或者比例失调无所谓的。例如,有一张图片路径为c:\123.jpg,怎么把它读取了,然后再保存成我想要的大小的图片呢?使用的关...
或者把它设成3000*4000的。图片是否失真或者比例失调无所谓的。
例如,有一张图片路径为c:\123.jpg ,怎么把它读取了,然后再保存成我想要的大小的图片呢?使用的关键函数有多少个呢?我对图片的操作一点也不懂,求高手写一下简单逻辑和需要使用的函数 展开
例如,有一张图片路径为c:\123.jpg ,怎么把它读取了,然后再保存成我想要的大小的图片呢?使用的关键函数有多少个呢?我对图片的操作一点也不懂,求高手写一下简单逻辑和需要使用的函数 展开
3个回答
展开全部
代码手写的,应该有错误,自己改下吧,hwnd是你View的m_hWnd句柄
CString path=_T("c:\123.jpg");
BITMAP bmp;
HBITMAP hbitmap=(HBITMAP)::LoadImage(0,path.AllocSysString(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
::GetObject(hbitmap,sizeof(BITMAP),&bmp);
DWORD dwCount=(DWORD)(bmp.bmWidthBytes*bmp.bmHeight);
CDC *pcdc = CDC::FromHandle(GetDC(hwnd));
pdc.CreateCompatibleDC(pcdc);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pcdc,width,height);
pdc.SelectObject(&bmp);
pdc.StretchBlt(0,0,300,300,(CDC*)pcdc,x,y,bmp.width,bmp.height,SRCCOPY);
CPalette *cpalette=pdc.GetCurrentPalette();
HPALETTE hpalette=HPALETTE(cpalette);
Bitmap bitmap(hbitmap,hpalette);
CString str=_T("C:\\123size.jpg");
WCHAR *pathname=str.AllocSysString();
CLSID clsid;
CString strsid=_T("image/jpg");
WCHAR *pstrsid=strsid.AllocSysString();
GetEncoderClsid(pstrsid,&clsid);
bitmap.Save(pathname,&clsid,NULL);
CString path=_T("c:\123.jpg");
BITMAP bmp;
HBITMAP hbitmap=(HBITMAP)::LoadImage(0,path.AllocSysString(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
::GetObject(hbitmap,sizeof(BITMAP),&bmp);
DWORD dwCount=(DWORD)(bmp.bmWidthBytes*bmp.bmHeight);
CDC *pcdc = CDC::FromHandle(GetDC(hwnd));
pdc.CreateCompatibleDC(pcdc);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pcdc,width,height);
pdc.SelectObject(&bmp);
pdc.StretchBlt(0,0,300,300,(CDC*)pcdc,x,y,bmp.width,bmp.height,SRCCOPY);
CPalette *cpalette=pdc.GetCurrentPalette();
HPALETTE hpalette=HPALETTE(cpalette);
Bitmap bitmap(hbitmap,hpalette);
CString str=_T("C:\\123size.jpg");
WCHAR *pathname=str.AllocSysString();
CLSID clsid;
CString strsid=_T("image/jpg");
WCHAR *pstrsid=strsid.AllocSysString();
GetEncoderClsid(pstrsid,&clsid);
bitmap.Save(pathname,&clsid,NULL);
展开全部
下载一个cximage库,这里面有对多种格式图片的支持,可以对图片进行放大、缩小等很多中效果,通过cximage就可以把他放到mfc界面上绘制了,你还可以选择等比例缩放,失真就能减少
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比较简单的方法,是调用OpenCV cvResize()函数即可。
比较有创新的方法,是调用Windows API的 BMP StretchDIBits()函数即可。
比较有创新的方法,是调用Windows API的 BMP StretchDIBits()函数即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询