提取CImageList中的图片到CBitmap 缩放图片

提取CImageList中的图片到CBitmap,图片缩放 - Fortunately小栏 -

 

功能简介:使用 CImageList 类的 Add 方法将图片资源加入,而后将资源读取出来,图片资源缩放。
1. 生成 Bitmap 资源。
2. 创建一个 CImageList 对象。
3. 将 Bitmap 图片资源加入到 CImageList  中。
4. 得到 CImageList 中的图片资源。
5. 缩放图片。
// 生成 Bitmap 资源
CBitmap m_Bitmap;
m_Bitmap.LoadBitmap (IDB_BITMAP1);
// 严重注意 Create 函数的前三个参数,宽度和高度必须是要加入图片的宽和高,否则如果加入后读取时也会有问题
CImageList ImgList ;
ImgList.Create(300, 300, ILC_COLOR32, 1, 0);
// 将图片添加到 CImageList 中
ImgList.Add(&m_Bitmap,RGB(0,0,0)) ;
// 得到 CImageList 中的资源
void GetListImage(CImageList &ImageList,CBitmap &Bitmap ,int nImageIdx)
...{  
    CClientDC   dcClient(NULL);
   
    IMAGEINFO   ImageInfo;
    ImageList.GetImageInfo(nImageIdx, &ImageInfo);

    int   nWidth  = abs(ImageInfo.rcImage.right - ImageInfo.rcImage.left);
    int   nHeight = abs(ImageInfo.rcImage.bottom - ImageInfo.rcImage.top);

    Bitmap.CreateCompatibleBitmap(&dcClient, nWidth, nHeight);

    CDC            dcMemory;
    dcMemory.CreateCompatibleDC((CDC*)NULL) ;

    CBitmap  *   pBmpOld = dcMemory.SelectObject(&Bitmap);
    dcMemory.FillSolidRect(0, 0, nWidth, nHeight, RGB(255,255,255));

    ImageList.Draw(&dcMemory, nImageIdx, CPoint(0,0), ILD_NORMAL);
    dcMemory.SelectObject(pBmpOld);

    dcMemory.DeleteDC();
    ::DeleteObject( ImageInfo.hbmImage );
    ::DeleteObject( ImageInfo.hbmMask );
}
//  缩放图片
void ScaleBitmap(CBitmap *pBitmap,CBitmap &BitmapNew, int nWidth,int nHeight)
...{
    CDC  dcSrc,dcDst ;
    int      nWidthOld, nHeightOld ;
    int      nWidthNew, nHeightNew ;

    BITMAP    pBitMap ;
    pBitmap->GetBitmap(&pBitMap) ;

    nWidthOld       = pBitMap.bmWidth ;
    nHeightOld   = pBitMap.bmHeight ;
    nWidthNew  = nWidth ;
    nHeightNew = nHeight ;

    // Create DC
    dcSrc.CreateCompatibleDC((CDC*)NULL);
    dcDst.CreateCompatibleDC((CDC*)NULL);

    // Source Bitmap
    dcSrc.SelectObject(pBitmap);

    // New Bitmap
    BitmapNew.CreateCompatibleBitmap(&dcSrc,nWidthNew,nHeightNew);

    // Scale Bitmap
    dcDst.SelectObject(&BitmapNew);
    //Maps pixels from the source rectangle into blocks of pixels
    //in the destination rectangle. The average color over
    //the destination block of pixels approximates the color of the source
pixels.
    dcDst.SetStretchBltMode(HALFTONE) ;
    dcDst.StretchBlt(0, 0, nWidthNew, nHeightNew, &dcSrc, 0, 0, nWidthOld,
nHeightOld, SRCCOPY);

    // Free Resource
    dcSrc.DeleteDC() ;
    dcDst.DeleteDC() ;
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值