请问采用IPicture方式读取图片并进行操作时,如何实现保存功能?

zhoukang326 2008-10-10 10:03:33
各位高手,本人初学MFC编程,因为要进行图像处理编程,刚开始为了实现多种类型图像
的打开操作,采用了IPicture指针。其他的操作都正常,但就是不知道如何进行图像的保存。

我可以得到图像的全部像素点。同学用Cbitmap类说是全部写上一遍。那么IPicture呢?
是不是要创建一个流,再构建成为IPicture对象,以后再怎么操作呢?

本人初学,没有一点概念,还请各位指教。最后哪里有一个完整的代码。。已经发愁的快要崩溃了。多谢了啊。
...全文
245 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoukang326 2008-10-12
  • 打赏
  • 举报
回复
非常感谢,简直就是救命啊!!

还有,如果我对图片进行了一些操作,例如通过算法找里面的轮廓。
怎么保存我所作的修改啊!!

我一部分的操作时通过SetPixel,还有通过MoveTo 和LineTo进行的,这个工作怎么做呢?
yxz_lp 2008-10-12
  • 打赏
  • 举报
回复
真累,不一步步写好还不行

//IPicture * pPicture = NULL;已载入图片
CComPtr<IStream> pfilestram;
CreateStreamOnHGlobal(NULL,TRUE,&pfilestram);
LONG size;
hr=pPicture->SaveAsFile(pStream,TRUE,&size);
char pathbuf[1024];
CFile iconfile;
iconfile.Open(TEXT("c:\\bb.bmp"), CFile::modeCreate|CFile::modeWrite);
LARGE_INTEGER li;
li.HighPart =0;
li.LowPart =0;
ULARGE_INTEGER ulnewpos;
pStream->Seek( li,STREAM_SEEK_SET,&ulnewpos);
ULONG uReadCount = 1;
while(uReadCount>0)
{

pStream->Read(pathbuf,sizeof(pathbuf),&uReadCount);
if(uReadCount>0)
iconfile.Write(pathbuf,uReadCount);
}
zhoukang326 2008-10-11
  • 打赏
  • 举报
回复
刚开始学,困难重重。
那位高手可以提供一点源码啊!!
没有一点概念,也根本找不到参考资料。
本人的MFC尚处于白痴阶段。
zhoukang326 2008-10-11
  • 打赏
  • 举报
回复
是否还需要创建一个BMP文件啊?
怎么操作啊?
zhoukang326 2008-10-10
  • 打赏
  • 举报
回复
IPicture中的SaveAsFile有三个参数,因为初学对MFC运行的机制不太明白,特此请教。
第一个参数是IStream * pstream,
//Pointer to stream where picture writes its data
表明的意思是不是我要首先定义一个数据流指针,执行这个命令后就将IPicture当前图像信息存入这个流中。
然后保存的时候再写出去。
我说的保存是再次生成一个新的图片。
这是如何实施呢?不在当前界面上操作,到哪里去写呢?(初学问题幼稚,切莫见怪)
yxz_lp 2008-10-10
  • 打赏
  • 举报
回复
IPicture有个SaveAsFile方法
zhoukang326 2008-10-10
  • 打赏
  • 举报
回复
谢谢回答。
本人刚刚接触。对此不甚了了。
看到别人做的还加一个GDI+的DLL。这对我来说又是一个新的知识。
非常想用一种简单明了的方法。
还请达人解释。
刚学,非常辛苦。。。
有时在抱怨自己。。。为什么选用了这么一个烦人的类。。。。。
初学,还是应该搞简单的啊!悔啊!!
laviewpbt 2008-10-10
  • 打赏
  • 举报
回复
IPicture在VB中的就是stdpicture,可以支持bmp,jpg,wmf,emf,ico,gif格式(当然支持的不是很完美)。比如柯达控件生成的BMP文件他就不能加载。 如果要保存的话,在VB中有Savepicture函数,VC中最简单的方式就是调用GDI+。
yxz_lp 2008-10-10
  • 打赏
  • 举报
回复
你可以采用
CreateStreamOnHGlobal(NULL,TRUE,&pfilestram);
LONG Picturesize;
hr=pPicture->SaveAsFile(pStream,TRUE,&Picturesize);
写入streame
然后从streame读出再写入file(.bmp)

19,468

社区成员

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

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