gdi+从文件读入图片再保存

vc6.0gdi+我弄好了,可以用gdi+实现图片的格式转换(确保gdi+什么的是引用正常的)。那如何将一个图片选入dc,然后把这个dc保存为图片呢?大约是这样的代码:H... vc 6.0 gdi+我弄好了,可以用gdi+实现图片的格式转换(确保gdi+什么的是引用正常的)。
那如何将一个图片选入dc,然后把这个dc保存为图片呢?
大约是这样的代码:
HDC imgdc=CreateCompatibleDC(NULL);
Gdiplus::Image *image=Image::FromFile(路径);
SelectObject(imgdc,image);
Bitmap bmpx(image->GetWidth(),image->GetHeight());
Graphics g(&bmpx);
HDC hdcx=g.GetHDC();
BitBlt(hdcx,0,0,image->GetWidth(),image->GetHeight(),imgdc,0,0,SRCCOPY);
CLSID encoderClsid;
GetEncoderClsid(L"image/jpeg", &encoderClsid);
bmpx.Save(L"d:\\55.jpg", &encoderClsid);
生成的文件,长宽和原来的一致,但是图片内容就是纯黑,什么都没有。这到底应该怎么写呢?
展开
 我来答
玩虐2015
推荐于2016-10-01 · TA获得超过1572个赞
知道小有建树答主
回答量:820
采纳率:0%
帮助的人:219万
展开全部
  1. GDI+画图是需要一个Graphic对象的, 

  2. 读取到的Image对象,

  3. 初始化一个Graphic对象,

  4. 然后用这个Graphic对象画图。

  5. 第一种:用内存流去存储。
    using(MemoryStream ms = new MemoryStream())
    {
    image.Save(ms, ImageFormat.Jpeg);//图片保存格式
    image.save(filepath);//图片保存地址
    ms.dispose();//清空内存
    image.Dispose();//清空图片缓存
    }
    第二种:将内存流转换为字节数组保存,效率更高
    using(MemoryStream ms=new MemoryStream())

    {
    image.Save(ms, ImageFormat.Jpeg);
    byte[] Imgs = ms.ToArray();
    ms.Dispose();
    image.Dispose();
    System.IO.File.WriteAllBytes(filepath, Imgs);
    }

百度网友38c8e98
2011-10-15 · TA获得超过2657个赞
知道小有建树答主
回答量:1131
采纳率:0%
帮助的人:582万
展开全部
SelectObject(imgdc,image);
据我所知,对内存DC选入位图,只有位图跟DC兼容才有效
兼容是指位图是单色位图0和1 或者位图的位数与DC一样
可能是这个原因
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式