搜了一下旧贴子没有太好的办法!
解决后即结贴!

解决方案 »

  1.   

    用img.Save(@"c:\1.wmf");
    就可以吗?
      

  2.   

    下面没有用GDI+,用的GDI,代码测试通过HDC hdc = CreateMetaFile("c:\\test.wmf");
    HBITMAP hbmp = (HBITMAP)::LoadImage(NULL,"c:\\te12.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    CDC memdc;
    memdc.CreateCompatibleDC(GetDC());
    HBITMAP hold = (HBITMAP)memdc.SelectObject(hbmp);
    BITMAP bmp;
    ::GetObject(hbmp,sizeof(bmp),&bmp);
    if(hbmp != NULL)
    {
    BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,memdc.m_hDC,0,0,SRCCOPY);
    }
    memdc.SelectObject(hold);
    memdc.DeleteDC();
    CloseMetaFile(hdc);
      

  3.   

    两篇文章:中文的:
    http://www.cppblog.com/TechLab/archive/2005/11/25/1302.aspx英文的:
    http://www.codeproject.com/vcpp/gdiplus/saveasemfexiwmf.asp
      

  4.   

    从MSDN上可以看到用GDI+的Image::Save方法可以很容易的实现把图片保存为BMP、GIF、TIFF、PNG、JPEG格式。虽然GDI+的Metafile类给了我们读取EMF、WMF格式图片方便,但是这个类没有直接提供保存的方法来写EMF、EXIF、WMF文件。这里介绍另外一种巧妙的写方法。
           先用GDI+的Bitmap类建立一个对象,所有的画图操作完成之后形成一个Bitmap位图。然后传入一个需要保存的EMF等文件的路径。用空的文件路径构造一个Metafile对象,再用Metafile对象构造一个Graphics画图对象,最后把源位图用DrawImage画出来即可。这里的目标画图DC实际上就是用EMF文件。
    Bitmap m_Bitmap;      //已经画好的位图对象,或者之间用位图文件构造
    USES_CONVERSION;      //提供A2W宏字符串转换
    sFileName = "c:\\test.emf";   //目标的EMF文件路径
    Metafile metafile(A2W(sFileName),cdc->m_hDC, EmfTypeEmfPlusDual,NULL);
    Graphics graphics(&metafile);
    graphics.DrawImage(&bmp, 0, 0, bmp.GetWidth(), bmp.GetHeight());这段程序如果用c#来写,应该怎么写?
      

  5.   

    s5689412(华君) 你好!
    我用Gdi+生成一副bmp图然后用img.Save()存为wmf格式后用freehad打开wmf图,缩放后会有失真现象,但是用freehand生成的wmf图缩放后就没有失真现象,是为什么呢?
      

  6.   

    sorry,我对WMF文件的内部格式不太了解,只是提供给你在.NET下转化的方法,我猜想,也许是freehand为了更好的支持向量格式,在它保存的文件中有更多的向量计算所用的内容,而.NET没有。你看看两幅相同的图片,是否freehand保存的大小较大?如果是的话,那就应证了我的猜想,如果不是,那就是我的猜想错了。^_^个人猜想,仅供参考。
      

  7.   

    s5689412(华君)你好,谢谢你回答:
    以下这段代码能改成c#的吗?
    Bitmap m_Bitmap;      //已经画好的位图对象,或者之间用位图文件构造
    USES_CONVERSION;      //提供A2W宏字符串转换
    sFileName = "c:\\test.emf";   //目标的EMF文件路径
    Metafile metafile(A2W(sFileName),cdc->m_hDC, EmfTypeEmfPlusDual,NULL);
    Graphics graphics(&metafile);
    graphics.DrawImage(&bmp, 0, 0, bmp.GetWidth(), bmp.GetHeight());
      

  8.   

    类似于这样: Image im = Image.FromFile(@"c:\snapshot20060112143826.jpg");
    Graphics srcg = Graphics.FromImage(im) ;
    IntPtr srcPtr = srcg.GetHdc(); Metafile metafile = new Metafile(@"C:\test.emf", srcPtr, EmfType.EmfPlusDual);
    Graphics g = Graphics.FromImage(metafile);
    g.DrawImage(im, 0, 0);
      

  9.   

    注意释放对象,紧接着上面的代码:
    srcg.ReleaseHdc(srcPtr);
    g.Dispose();
    metafile.Dispose();
    im.Dispose();
    srcg.Dispose();
      

  10.   

    我用Gdi+生成一副bmp图然后用img.Save()存为wmf格式后用freehad打开wmf图,缩放后会有失真现象,但是用freehand生成的wmf图缩放后就没有失真现象,是为什么呢?==============================将bmp转换为wmf,其实已经失去了图中的矢量信息(只有点阵),放大后当然会失真。
    freehand生成的wmf中保存的是真正的矢量信息,所以不会失真。
      

  11.   

    runrunrun(一条不会游泳の鱼) ,那怎么办,有什么好的办法吗?