我现在在写一个能将jpg数据转换成bmp数据的程序,比如说从服务器端发送过来一个jpg格式的数据,然后在接收端要经过处理将它显示出来,所以我需要把接收到的jpg数据先转化为bmp格式然后才能进行处理,这问题烦死我了,看了GDI+但是不知道怎么用,各位高手知道的帮帮忙,解决一下问题,最好有代码,或者告诉下小弟该怎么做谢谢了

解决方案 »

  1.   

    1、用GlobalAlloc分配内存用于接收并缓存jpg数据
    2、调用CreateStreamOnHGolbal创建一个IStream接口
    3、调用OleLoadPicture构造IPicture接口
    4、调用IPicture::Render方法绘制到DC即可
      

  2.   

    但是这样只能把jpg的图像给显示出来,并没有转化为bmp格式的图像,因为我还要对jpg的图像做处理,所以需要转化为bmp
      

  3.   

    没有现成的API可用(GDI+不太熟,不清楚有没有),最好自己熟悉两种图片的格式,用代码来转换,好在这两种格式都是开放的,实现也并不复杂,这个网址可以下载转换代码
      

  4.   

    内存中的数据转化可以使用CXIMAGE或FREEIMAGE来完成,两个库都很成熟,速度也不错
      

  5.   

    如何使用CXIMAGE来对内存中的数据进行转化,从csdn上下载了一个cximage的库,里面都是头文件和cpp文件
      

  6.   

    去CODEPROJECT上找,最新的6
    上面有使用说明
      

  7.   

    1、用GlobalAlloc分配内存用于接收并缓存jpg数据
    2、调用CreateStreamOnHGolbal创建一个IStream接口 Gdiplus::Bitmap::FromStream可以构造一个GDI的图像对象,然后通过Save或者Decode类转换为位图即可
      

  8.   

    http://topic.csdn.net/u/20080730/22/9f0a2988-1c7d-4cf4-8852-492bb612e765.html
      

  9.   

    GDI+ 啊?Image img = Image.FromFile("received.jpg");
    Bitmap bmp = Bitmap.FromImage(img);这样应该行。。
      

  10.   


    基本上就是他说的,也是最简单的方法。OleLoadPicture可以接受内存流。都绘制到DC了,你还不会怎么保存到BMP么?DC上的位图就是一个DIB,甚至不需要调用什么函数,自己加一个BITMAPFILEHEADER就可以。
    稍微查查GDI吧。
      

  11.   

    不是吧,opencv这么神奇,哪句话啊,说清楚点,不然不给分
      

  12.   

    要的不是显示出来,而是在内存里把JPG变成BMP,不是显示出来,也不是变成BMP文件,只是在内存转换成BMP,楼主的意思就是这样