CImageList和CListCtrl贴图有关问题
CImageList和CListCtrl贴图问题?
有一个文件夹,里面有一些.jpg图片,然后读取出来,贴到CListCtrl中,因为想要得到缩放比例相等的图片,所以我有两种思路:
1、我建立同样大小的CImageList对象,程序中是(宽84,高100),然后通过gdi+读取图片转换成Bitmap,然后通过CBitmap对象取得图片的宽和高做缩放,缩放时候是以宽为基准。问题就产生了,比如一张比例缩放后宽是84,但是高只有80,程序最后的结果是,剩下的20高度是黑色,请问这个黑色部分可以设置成别的颜色吗?(我试过CImageList * p->SetBkGround(RGB(255,255,255))),但是没用。
2、然后我就想用第二种方法,每读取一张图片,比例缩放宽和高(width,height)建立一个CImageList对象,在Create函数中设置为缩放后的width和height,下面的代码是这种方法的:
------解决方案--------------------
有一个文件夹,里面有一些.jpg图片,然后读取出来,贴到CListCtrl中,因为想要得到缩放比例相等的图片,所以我有两种思路:
1、我建立同样大小的CImageList对象,程序中是(宽84,高100),然后通过gdi+读取图片转换成Bitmap,然后通过CBitmap对象取得图片的宽和高做缩放,缩放时候是以宽为基准。问题就产生了,比如一张比例缩放后宽是84,但是高只有80,程序最后的结果是,剩下的20高度是黑色,请问这个黑色部分可以设置成别的颜色吗?(我试过CImageList * p->SetBkGround(RGB(255,255,255))),但是没用。
2、然后我就想用第二种方法,每读取一张图片,比例缩放宽和高(width,height)建立一个CImageList对象,在Create函数中设置为缩放后的width和height,下面的代码是这种方法的:
while (res)函数是一个循环查找文件,然后贴图的过程。程序的结果是只有80%显示了,没有显示图片。请问这个为什么?如果想实现比例缩放的缩略的图的显示,用以上两个的思路可以吗?谢谢!!!
{
CImageList m_Imagelist;
m_Imagelist.Create(84, 100, ILC_COLOR16, 5, 5);
m_img_list.SetImageList(&m_Imagelist, LVSIL_NORMAL); //关联
res = ff.FindNextFile();
strFileName = ff.GetFileName();
m_strImageName = strFilePathName + "\\" + strFileName; //获取文件绝对路径
m_img_list.InsertItem(i, "80%", i);
Bitmap bmp(m_strImageName.AllocSysString()); //用图片的绝对路劲来初始化
int sourceWidth = 84;
int sourceHeight = bmp.GetHeight() * sourceWidth / bmp.GetWidth();
Bitmap * pThumbnail = (Bitmap*)bmp.GetThumbnailImage(sourceWidth, sourceHeight, NULL, NULL);
HBITMAP hBmp;
pThumbnail->GetHBITMAP(RGB(255,255,255), &hBmp);
CBitmap *pImage = CBitmap::FromHandle(hBmp); //转换格式
m_Imagelist.Add(pImage, RGB(255,255,255)); //添加
pImage->DeleteObject();
m_Imagelist.DeleteImageList();
i++;
}
------解决方案--------------------
//修改开始,创建图像列表放到循环外面---------------
CImageList m_Imagelist; //这个必须是类成员变量或指针
m_Imagelist.Create(84, 100, ILC_COLOR16, 5, 5);
m_img_list.SetImageList(&m_Imagelist, LVSIL_NORMAL); //关联
//修改结束---------------
while (res)
{
res = ff.FindNextFile();
strFileName = ff.GetFileName();
m_strImageName = strFilePathName + "\\" + strFileName; //获取文件绝对路径
m_img_list.InsertItem(i, "80%", i);
Bitmap bmp(m_strImageName.AllocSysString()); //用图片的绝对路劲来初始化
//修改开始---------------
int nSrcWidth = bmp.GetWidth();
int nSrcHeight = bmp.GetHeight();
int nNewWidth;
int nNewHeight;
GetProportionSize(nSrcWidth,nSrcHeight,84,100,&nNewWidth,&nNewHeight);
int x=(84-nNewWidth)/2;//重新计算X/Y,使图片居中
int y=(100-nNewHeight)/2;
Bitmap Thumbnail(84,100);//创建缩略图,和Imagelist一样尺寸
Graphics* pGraphics=new Graphics(Thumbnail);
pGraphics->FillRectangle(...);//给缩略图填充一个背景,比如白色