zoukankan      html  css  js  c++  java
  • MFC CListctr显示缩略图

          我们知道通过CImageList可以让listctr显示出图片,但是添加的图片大小必须和要CImageList 创建的图片大小一致,才能显示出来。最近遇到一个需求,需要把很多大小不一的jpeg图片通过列表框来显示出缩略图。

         首先创建指定大小的CImageList

    1 void CListEx::setCreateImageList(int iWidth, int iheight)
    2 {
    3     m_iImageWidth = iWidth;
    4     m_iImageHeight = iheight;
    5     m_imageList.Create(m_iImageWidth, m_iImageHeight, ILC_COLOR32, 20, 1);
    6     SetImageList(&m_imageList, LVSIL_SMALL);
    7 }

          采用Gdi来缩放的,路径为图片的路径,jpeg也支持,不需要转换格式

    void CListEx::AddImage(LPCSTR imagePath)
    {
        WCHAR path[512] = { 0 };
        ::MultiByteToWideChar(CP_ACP, 0, (const char *)imagePath, strlen(imagePath), path, sizeof(path));
    
        Gdiplus::Bitmap bmp(path);
    
        int sourceWidth = m_iImageWidth;
        int sourceHeight = bmp.GetHeight();
    
        if (sourceHeight > m_iImageHeight)
        {
            sourceHeight = m_iImageHeight;
        }
        else
        {
            sourceHeight = bmp.GetHeight();
        }
        
        //设定缩略图的大小
        Gdiplus::Bitmap* pThumbnail = (Gdiplus::Bitmap*)bmp.GetThumbnailImage(sourceWidth, sourceHeight, NULL, NULL); 
        HBITMAP hBmp;
    
        pThumbnail->GetHBITMAP(Gdiplus::Color(LIST_BKCOLOR), &hBmp);
        CBitmap *pImage = CBitmap::FromHandle(hBmp);
        
        m_imageList.Add(pImage, RGB(255, 0, 255));
        
        // 下面的代码,如果没有,会产生内存泄漏
        delete pThumbnail;
        pThumbnail = NULL;
        pImage->DeleteObject();
        pImage->DeleteTempMap();
    }

    别忘了初始化gdi,在CXXXApp::InitInstance()里添加初始化代码

        //初始化Gdi+
        Gdiplus::GdiplusStartupInput gdiplusStartupInput;
        Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);    

    在CXXXApp::ExitInstance()里添加关闭gdi代码

    Gdiplus::GdiplusShutdown(m_gdiplusToken);

     在CXXXApp的头文件里添加m_gdiplusToken的声明

    ULONG_PTR m_gdiplusToken;
    高山流水,海纳百川!
  • 相关阅读:
    html5阴影
    html5绘制字符串
    HTML5绘制几何图形
    Animation同时改变多个属性的动画
    Animation鱼眼效果
    Animation动画
    IE6中CSS常见BUG全集及解决方案——摘自网友
    transition多个属性同时渐变(width,height,background)
    【BZOJ2049】 [Sdoi2008]Cave 洞穴勘测
    【CF995F】 Cowmpany Cowmpensation
  • 原文地址:https://www.cnblogs.com/ahcc08/p/10987829.html
Copyright © 2011-2022 走看看