MFC中封存图片

MFC中保存图片
     我在Picture中放入一张图片,不一定是.bmp类型的,然后对这个图片进行修改,比如在图片上画了一个矩形,然后想保存这个图片。就像Windows自带画板中的“另存为”的类似功能。
     我有用过这个
CRect TPrect;
GetDlgItem(IDC_IMAGE)->GetClientRect(&TPrect);    //Picture控件的矩形大小
HBITMAP hbitmap=CreateCompatibleBitmap(dc->m_hDC,m_Lwidth,m_Lhight);
HDC hdc=CreateCompatibleDC(dc->m_hDC);
HBITMAP hOldMap=(HBITMAP)SelectObject(hdc,hbitmap);
StretchBlt(hdc,0,0,m_Lwidth,m_Lhight,dc->m_hDC,0,0,TPrect.Width(),TPrect.Height(),SRCCOPY);   //将原始设备描述表的颜色表及像素数据块复制到兼容设备描述表中
CImage image;
image.Attach(hbitmap);
CString FilePath;
FilePath=m_StrArray[m_Index];
FilePath=FilePath.Left(FilePath.Find('.'));
FilePath+=_T(".jpg");
HRESULT hResult = image.Save(FilePath);
if (FAILED(hResult))
{
     MessageBox(_T("保存图像文件失败!"));
}
image.Detach();
SelectObject(hdc,hOldMap);
但是所得的图片失真了,像素倒是不变的。。。希望有人帮忙,怎么改。。。。或者另外的实现保存的代码或可用的函数,,谢谢。。。

------解决方案--------------------
StretchBlt会导致失真,建议换BitBlt试一下
另外保存为JPG也会失真,不想失真最好保存为BMP
------解决方案--------------------
如果你一定要用StretchBlt可以用如下代码试试,看会不会失真。
SetStretchBltMode(hdc,HALFTONE);
StretchBlt(...);
------解决方案--------------------
CImage保存jpg就是会失真
jpg是有压缩比的
以前我用的使用也没有仔细研究这个问题
你用GDI+存一下试试
------解决方案--------------------
引用:
引用于: 2012-12-29 12:49:02 

CImage保存jpg就是会失真
 jpg是有压缩比的
 以前我用的使用也没有仔细研究这个问题
 你用GDI+存一下试试 
什么叫用GDI+存一下?能将的稍微详细些吗?谢谢

GDI+可以实现文件存储
http://www.yesky.com/SoftChannel/72342371928702976/20040717/1831984.shtml
------解决方案--------------------
引用:
引用:引用:引用:不影响你实现这个功能
不就是保存么
你想保存什么就保存什么啊
啊...用什么函数实现呢....新手不解/...我不是给你看参考资料了么
你还有什么不明白的呢?
那东西我看过了呀,,,难道是我没看懂???这不是只能从本机上取得图片,然……

所谓举一反三么
你说的没错
例子讲的确实是从文件到文件
但是具体过程是不是这样的
读文件
提取数据流
存储数据流
也就是说你要你能获取到想要保存数据流就可以实现保存文件
至于数据流怎么来的
那就是你自己的事了
可以从文件来
也可以自己做出来
我就提到这吧
只是一个思路
如果你觉得不合适
那还是按着你熟悉的方法来吧
祝你好运
------解决方案--------------------
引用:
引用:果断使用GDI
怎么用?

我估计他是少了个+号,他的意思是果断使用GDI+