VC/MFC 如何让一张图片文件放大缩小呢。比如图片的分辨率是1024*768的,然后将它成了分辨率改为300*300

或者把它设成3000*4000的。图片是否失真或者比例失调无所谓的。
例如,有一张图片路径为c:\123.jpg ,怎么把它读取了,然后再保存成我想要的大小的图片呢?使用的关键函数有多少个呢?我对图片的操作一点也不懂,求高手写一下简单逻辑和需要使用的函数

代码手写的,应该有错误,自己改下吧,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);
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-30
下载一个cximage库,这里面有对多种格式图片的支持,可以对图片进行放大、缩小等很多中效果,通过cximage就可以把他放到mfc界面上绘制了,你还可以选择等比例缩放,失真就能减少
第2个回答  2012-07-30
比较简单的方法,是调用OpenCV cvResize()函数即可。
比较有创新的方法,是调用Windows API的 BMP StretchDIBits()函数即可。

vc\/mfc中bmp文件保存的问题
位图的颜色格式是通过颜色面板值(planes)和颜色位值(bitcount)计算得来的,颜色面板值永远是1,而颜色位值则可以是1、4、8、16、24、32其中的一个。如果它是1,则表示位图是一张单色位图(译者注:通常是黑白位图,只有黑和白两种颜色,当然它也可以是任意两种指定的颜色),如果它是4,则表示这是一...

编程语言包括哪几种,它们的区别是什么
执行示例页面时,可以在这里看到 JSP 页面如何被转换成 Java 源文件,然后又被编译成 class 文件(即 Servlet )。 JSWDK 软件包中的示例页面分为两类,它们或者是 JSP 文件,或者是包含一个表单的 HTML 文件,这些表单均由 JSP 代码处理。与 ASP 一样, JSP 中的 Java 代码均在服务器端执行。因此,在浏览器中使...

相似回答