三个问题:怎么读JPEG图片到内存,怎么在内存在把JPEG转为BMP(用类库也行)

解决方案 »

  1.   

    你试一试 OleLoadPicture ,使用 IPicture 
      

  2.   

    并不是为了显示出来,而是为了转成BMP好进行处理
      

  3.   

    用cximage库打开jpg
    bool Load(const TCHAR* filename, DWORD imagetype=0);内存中转为bmp文件格式
    bool Encode(BYTE * &buffer, long &size, DWORD imagetype);如果是想获得hbitmap
    HBITMAP MakeBitmap(HDC hdc = NULL);如果是想存为文件
    bool Save(const TCHAR* filename, DWORD imagetype);
      

  4.   

    用Image类:
    static Image* Image::FromFile(const WCHAR *filename,
        BOOL useEmbeddedColorManagement
    );
    Status Image::Save(IStream *stream,
        const CLSID *clsidEncoder,
        const EncoderParameters *encoderParams
    );
    Status Image::Save(const WCHAR *filename,
        const CLSID *clsidEncoder,
        const EncoderParameters *encoderParams
    );
      

  5.   

    看看下面的程序是否能解决你的问题
             TJPEGImage *jpeg=new TJPEGImage;
            Graphics::TBitmap *bmp=new Graphics::TBitmap;
            jpeg->LoadFromFile(ImageName);
            bmp->Assign(jpeg);
      

  6.   

    直接用自带的CImage的read和save就可以了啊
      

  7.   

    直接用自带的CImage的read和save就可以了啊
    要强大功能,可以用openCV完全可以
      

  8.   

    能解释一下里面这些东西吗,比如:TJPEGImage是啥TBitmap是啥,Assign是啥
      

  9.   

    CImage MFC自带的啊。CImage img;
    img.load("1.jpg");
    img.save("1.bmp",ImageFormatBMP);
      

  10.   

      那个英特尔有这方面的库,需要的话给我留言吧,使用他的lib库文件可以方便的得到BMP像素区文件
      

  11.   

    CImage image;
    image.Load ("1.jpg");
    之后int imageSize = 怎么得到长度,
    怎么建立一个流,然后用image.save(流,"1.bmp");
    怎么返回一个流后重新得到BMP的文件头跟其实的,再分配内存,再保存为BMP文件
    每一步都不能省,有人会的吗
      

  12.   


    img.Save(IStream* pStream,ImageFormatBMP) 
      

  13.   


    HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, 0);
    IStream *pstm=NULL;
    CreateStreamOnHGlobal(m_hMem, TRUE, &pstm);
    img.Save(pstm, ImageFormatBMP);
    if(pstm == NULL) return;
    LARGE_INTEGER liBeggining = { 0 };
    pstm->Seek(liBeggining, STREAM_SEEK_SET, NULL);
    //DWORD wTemp=GlobalSize(m_hMem);
    LPBYTE lpData = (LPBYTE)GlobalLock(m_hMem);
      

  14.   

    反过来也是一样,根据内存数据,再到IStream,再load,再save文件
      

  15.   

    用libjpeg吧,文件、内存都可以
      

  16.   

    没错啦没错啦,就是这样子,不过HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, 0);
    第二个参数为0行吗?,还有就是 CImage image;
    HRESULT hr =image.Load ("1.jpg");
    if(S_OK != hr)
    {
    AfxMessageBox("load出错");
    }
    COleStreamFile   image_stream   ;   
    image_stream.CreateMemoryStream(NULL);
    IStream* stream =image_stream.GetStream ();
     hr =image.Save(stream,Gdiplus::ImageFormatBMP);
    这段代码对不,要是对的话,得到stream的流之后,怎么整回一张BMP图片来
      

  17.   

    可以啊,我上面那个已经成功了,现在的问题是怎么把Stream重新整回成一张BMP图片(比如把图文件头啊,图信息头啊,调色板啊等重新建一个内存然后放进个内存里,保存回一个图片来),这是最后一个问题了,帮帮忙好不
      

  18.   

    看这个
    http://www.cnblogs.com/zhixing/
      

  19.   

    CxImage和Opencv都比较好,而且开源。
    但是做图像处理用Opencv比较好。
    Opencv2.3.1 读图像并且显示保存的代码如下: Mat img = imread("d:\\img.jpg"); imshow("show image", img); imwrite("d:\\img.bmp",img);