功能简介:使用 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() ;
}