提取CImageList中的图片到CBitmap,图片缩放(转)

功能简介:使用 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、付费专栏及课程。

余额充值