本帖最后由 NEW_ONE_GAY 于 2011-05-24 21:15:09 编辑

解决方案 »

  1.   

    直接用GDI+的Bitmap就可以轻松实现,还说什么“很难很难”?Bitmap bit2(hBitmap, NULL); //从hBitmap创建Bitmap  
     
    CLSID encoderClsid;     
    EncoderParameters encoderParameters; 
    int quality = 100;   // jpeg图象质量 
    encoderParameters.Count     =     1;     
    encoderParameters.Parameter[0].Guid     =     EncoderQuality;     
    encoderParameters.Parameter[0].Type     =     EncoderParameterValueTypeLong;     
    encoderParameters.Parameter[0].NumberOfValues     =     1;     
    encoderParameters.Parameter[0].Value     =     &quality;     
    if(strExt==_T("jpg")){
    GetEncoderClsid(L"image/jpeg", &encoderClsid); 
    }else if(strExt==_T("gif")){
    GetEncoderClsid(L"image/gif", &encoderClsid); 
    }else if(strExt==_T("png")){
    GetEncoderClsid(L"image/png", &encoderClsid); 
    }else if(strExt==_T("bmp")){
    GetEncoderClsid(L"image/bmp", &encoderClsid); 
    }else{
    DeleteObject(hBitmap);
    return;
    }
    bit2.Save(strFileName, &encoderClsid, &encoderParameters);     
    DeleteObject(hBitmap);

    int GetEncoderClsid(LPCWSTR format, CLSID*     pClsid)     
    {   
    UINT num = 0;                     // number of image encoders   
    UINT size = 0;                   // size of the image encoder array in bytes   
    ImageCodecInfo* pImageCodecInfo = NULL;   
    GetImageEncodersSize(&num, &size);   
    if(size == 0)   
    return -1;     //   Failure    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));   
    if(pImageCodecInfo == NULL)   
    return -1;     //   Failure    GetImageEncoders(num, size, pImageCodecInfo);   
    for(UINT j = 0; j < num; ++j)   
    {   
    if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )   
    {   
    *pClsid = pImageCodecInfo[j].Clsid;   
    free(pImageCodecInfo);   
    return j;     //   Success   
    }           
    }   
    free(pImageCodecInfo);   
    return -1;     //   Failure   
    }
      

  2.   

    LS的  我是要 大的HBITMAP  变成  小的HBITMAP 
    没看那么多代码  
    就这句 bit2.Save(strFileName, &encoderClsid, &encoderParameters);     
    BMP转JPG谁不会啊???????????????而且你居然用GDI来转  CImage Save函数两行就可以了我需要的是    内存中转换       大字节的HBITMAP变成小字节的HBITMAP     不生成jpg文件  处于内存中HBITMAP格式的jpg图片              不写出jpg图片或许可以不叫他jpg图片   叫他是经过处理的小字节HBITMAP        算了还是直接找jpg图片的算法了  心灰意冷~ 
     
      

  3.   

    GDI+可以直接从内存中读取,也可以保存至内存的。
      

  4.   

      对就是LS的意思  保存至内存 不写出jpg图片  貌似有头绪了   http://blog.csdn.net/secondfloor/archive/2009/08/13/4443538.aspx 
      

  5.   

    不就是在内存中将bmp转格式?
    cximage随便实现
    opencv也可以随便坐
    据说CImage也行,opengl应该也没问题。
    不怕麻烦,看看压缩编码,自己写吧