登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

VC实现:bmp转jpg、jpg转bmp、截屏保存jpg(GDI+)  

2011-04-20 00:04:37|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

需要GDI+,如果没有请看:vc6.0 下设置GDI+

int GetEncoderClsid(const WCHAR* 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  
}

 

/****************BMP转JPG*********用法示例**************************

Bitmap newbitmap(L"d:\\d.bmp");//加载BMP
const unsigned short *pFileName=L"d:\\new.jpg";//保存路径
SaveFile(&newbitmap,pFileName );

************************************************************/

void SaveFile(Bitmap* pImage, const wchar_t* pFileName)//
{
    EncoderParameters encoderParameters;
    CLSID jpgClsid;
GetEncoderClsid(L"image/jpeg", &jpgClsid);
    encoderParameters.Count = 1;
    encoderParameters.Parameter[0].Guid = EncoderQuality;
    encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
    encoderParameters.Parameter[0].NumberOfValues = 1;

    // Save the image as a JPEG with quality level 100.
    ULONG             quality;
    quality = 100;
    encoderParameters.Parameter[0].Value = &quality;
    Status status = pImage->Save(pFileName, &jpgClsid, &encoderParameters);
    if (status != Ok)
    {
        wprintf(L"%d Attempt to save %s failed.\n", status, pFileName);
    }
}


// 将当前屏幕保存成为jpg图片      
// 参数   xs = 图象x轴大小,   ys = 图象y轴大小,   quality = jpeg图象质量      
void SaveCurScreenJpg(LPCWSTR   pszFileName,   int   xs,   int   ys,   int   quality)  
{  
    HWND hwnd = ::GetDesktopWindow();  
    HDC hdc = GetWindowDC(NULL);  
    int x = GetDeviceCaps(hdc, HORZRES);  
    int y = GetDeviceCaps(hdc, VERTRES);  
    HBITMAP hbmp = ::CreateCompatibleBitmap(hdc, x, y), hold;  
    HDC hmemdc = ::CreateCompatibleDC(hdc);  
    hold = (HBITMAP)::SelectObject(hmemdc,   hbmp);  
    BitBlt(hmemdc, 0, 0, x, y, hdc, 0, 0, SRCCOPY);  
    SelectObject(hmemdc, hold);  
   
    Bitmap bit(xs, ys), bit2(hbmp, NULL);  
    Graphics g(&bit);  
    g.ScaleTransform((float)xs/x,   (float)ys/y);  
    g.DrawImage(&bit2,   0,   0);  
   
    CLSID                           encoderClsid;  
    EncoderParameters   encoderParameters;  
   
    encoderParameters.Count   =   1;  
    encoderParameters.Parameter[0].Guid   =   EncoderQuality;  
    encoderParameters.Parameter[0].Type   =   EncoderParameterValueTypeLong;  
    encoderParameters.Parameter[0].NumberOfValues   =   1;  
    encoderParameters.Parameter[0].Value   =   &quality;  
   
    GetEncoderClsid(L"image/jpeg",   &encoderClsid);  
    bit.Save(pszFileName,   &encoderClsid,   &encoderParameters);  
  
    ::DeleteObject(hbmp);  
    ::DeleteObject(hmemdc);  
    return;  
}  


HBITMAP   ReturnHBITMAP(CString   FileName)//FileName可能是bmp、dib、png、gif、jpeg/jpg、tiff、emf等文件的文件名
{
          Bitmap   tempBmp(FileName.AllocSysString())   ;
        Color       backColor;      
        HBITMAP       HBitmap;  
        tempBmp.GetHBITMAP(backColor,&HBitmap);
        return   HBitmap;

}


if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 54478; var cb_entryId = 1824069; var cb_blogApp = "carekee"; var cb_blogUserGuid = "326aa8c6-5b13-de11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2010/9/11 18:13:00';
  评论这张
 
阅读(4916)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018