`

VC/MFC加载图片(JPG、JPEG、BMP)

    博客分类:
  • C++
阅读更多
//加载jpg图片
int m_TotCount;
CImageList m_ImageList;
CListCtrl m_List;
HIMAGELIST hScreens = ImageList_Create(THUMWIDTH, THUMHEIGHT, ILC_COLOR32, 0, 1);
m_ImageList.Attach(hScreens);

m_list.SetImageList(&m_ImageList, LVSIL_NORMAL);

for (int i = 0; i<4; i++ )
{
    CString ss;
    ss.Format("%d",i);
    HBITMAP bitm=LoadPicture( GetExeAbsolutePath()+ss+".jpg" );
    if (bitm!=NULL)
    {
        m_TotCount=m_list.GetItemCount();
        CBitmap*    pImage = NULL;   
        pImage = new CBitmap();       
        pImage->Attach(bitm);
        int imgP=m_ImageList.Add(pImage,RGB(0,0,0));
        m_list.InsertItem(m_TotCount,ss+".jpg",imgP);       
        m_list.SetItemText(m_TotCount, 1, ss+".jpg");
    }   
}

//加载Jpg、Bmp图片,这个函数是关键代码!!!!!!!
HBITMAP CAddbmpDlg::LoadPicture(CString mFile)
{
    CString pFSize;
    WCHAR wpath[MAX_PATH];
    MultiByteToWideChar(CP_ACP, 0, mFile, -1, wpath, MAX_PATH);
   
    IPicture* pPic;
    OleLoadPicturePath(wpath, NULL, NULL, NULL, IID_IPicture,(LPVOID*)&pPic);
   
    if (pPic==NULL) return NULL;
    HBITMAP hPic = NULL;
    pPic->get_Handle((UINT*)&hPic);
   
    long nWidth=THUMWIDTH;
    long nHeight=THUMHEIGHT;
   
    long mWid,mHei;
    pPic->get_Height(&mHei);
    pPic->get_Width(&mWid);
   
    HBITMAP hPicRet = (HBITMAP)CopyImage(hPic, IMAGE_BITMAP, nWidth, nHeight , LR_COPYDELETEORG);   
   
   
    HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
    HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
   
   
    RECT rcBorder;
    rcBorder.left=rcBorder.top=0;
    rcBorder.right=THUMWIDTH;
    rcBorder.bottom=THUMHEIGHT;
   
    const float fRatio=(float)THUMHEIGHT/THUMWIDTH;
   
    int XDest, YDest, nDestWidth, nDestHeight;
   
    const float fImgRatio=(float)mHei/mWid;
    if(fImgRatio > fRatio)
    {
        nDestWidth=(THUMHEIGHT/fImgRatio);
        XDest=(THUMWIDTH-nDestWidth)/2;
        YDest=0;
        nDestHeight=THUMHEIGHT;
    }
    else
    {
        XDest=0;
        nDestWidth=THUMWIDTH;
        nDestHeight=(THUMWIDTH*fImgRatio);
        YDest=(THUMHEIGHT-nDestHeight)/2;
    }
   
    CClientDC cdc(this);
    HDC hDC=::CreateCompatibleDC(cdc.m_hDC);
    HBITMAP bm = CreateCompatibleBitmap(cdc.m_hDC, THUMWIDTH, THUMHEIGHT);
    HBITMAP pOldBitmapImage = (HBITMAP)SelectObject(hDC,bm);
    ::FillRect(hDC, &rcBorder, hBrushBk);
    ::FrameRect(hDC, &rcBorder, hBrushBorder);
    HBITMAP hBmReturn= (HBITMAP)::SelectObject(hDC, pOldBitmapImage);
   
    CDC hdcSrc, hdcDst;
   
    hdcSrc.CreateCompatibleDC(NULL);
    hdcDst.CreateCompatibleDC(NULL);
   
    // Load the bitmaps into memory DC
    CBitmap* hbmSrcT = (CBitmap*) hdcSrc.SelectObject(hPicRet);
    CBitmap* hbmDstT = (CBitmap*) hdcDst.SelectObject(hBmReturn);
   
    hdcDst.BitBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,SRCCOPY);   
    pOldBitmapImage = (HBITMAP)SelectObject(hdcDst.m_hDC,bm);
   
    DeleteDC(hDC);
    DeleteObject(hBrushBorder);
    DeleteObject(hBrushBk);
   
    return pOldBitmapImage;
}

CString CAddbmpDlg::GetExeAbsolutePath()
{
    char buffer[ MAX_PATH ];
    CString ExePath = "";
    GetModuleFileName( NULL, buffer, MAX_PATH );
    ExePath=CString( buffer );
    ExePath=ExePath.Left(
                ExePath.ReverseFind( '\\' )>ExePath.ReverseFind( '/' )?
                ExePath.ReverseFind( '\\' )+ 1:
                ExePath.ReverseFind( '/' )+1       
                );
    return ExePath;
}
分享到:
评论

相关推荐

    vc6.0下mfc控件加载jpg格式图片

    以下是如何在MFC应用中加载和显示JPEG图片的详细过程: 1. **引入额外库**:VC6.0本身并不包含对JPEG格式的支持。你需要引入一个第三方库,如JPEG Library(也称为libjpeg),来解析和加载这种格式的图片。将该库...

    VC/MFC 图像的加载、

    CImage是MFC扩展库ATL(Active Template Library)的一部分,它提供了对位图操作的封装,支持多种常见的图像格式,如BMP、JPEG、PNG等。在使用CImage之前,确保你的项目已经包含了 ATL/MFC 动态链接库(ATL/MFC DLLs...

    vc动态加载显示本地jpg/jpeg/bmp图片

    总结起来,利用VC++的IPicture接口动态加载本地jpg、jpeg和bmp图片,涉及到的关键步骤包括:加载OLE库,调用LoadPicture函数获取IPicture接口,使用该接口在控件上绘制图片,并在不再需要时释放资源。这个方法不仅...

    VC下加载_JPG_JPEG__GIF_PNG_图片最简单的方法.txt

    ### VC 下加载 JPG/JPEG/GIF/PNG 图片最简单的方法 在Visual C++ (VC) 开发环境中处理图像时,经常会遇到需要加载各种格式图片(如 JPG、JPEG、GIF 和 PNG)的需求。本文将详细介绍如何在 VC 下简单有效地加载这些...

    vc 动态加载显示jpg、bmp图片

    在VC++编程环境中,动态加载并显示JPEG或BMP图片是一项常见的任务,特别是在开发图形用户界面(GUI)应用程序时。本篇文章将详细讲解如何利用IPicture接口来实现这一功能,同时也会涉及到一些基本的图像处理知识。 ...

    VC/MFC缩略图列表源码

    【VC/MFC缩略图列表源码】是一个用于在MFC(Microsoft Foundation Classes)环境中实现类似Windows系统中图片缩略图展示的项目。这个源代码实现了用户可以通过树形结构选择文件夹,然后程序会动态加载并显示所选...

    数字图像处理实验4 VC/VS MFC 编写JPEG图象读/写程序

    在VC/VS中,我们可以使用MFC库中的CImage类来处理JPEG图像。CImage类提供了一套完整的图像操作接口,包括加载、保存、显示等。为了读取JPEG图像,我们需调用CImage的Load函数,传入JPEG文件的路径。例如: ```cpp ...

    VC6实现打开bmp图片及bmp转jpg 图像翻转及二值化

    在本文中,我们将深入探讨如何使用Visual C++ 6.0(简称VC6)来处理图像,特别是关于打开BMP图像、转换为JPG格式、以及执行图像翻转和二值化操作。这些功能在图像处理领域具有广泛的应用,如图像分析、机器视觉和...

    在VC++6.0中将JPG格式图片转换成BMP格式

    在VC++6.0中将JPG格式图片转换成BMP格式主要依赖于Microsoft的GDI+库。GDI+是Windows图形设备接口的一个扩展,提供了丰富的图形处理能力,包括图像加载、绘制和保存等功能。以下是一份详细的步骤指南: **一、配置...

    MFC显示JPG图片

    CImage是MFC提供的一种便利类,它支持多种图像格式,包括JPEG(JPG)、BMP和GIF。在MFC应用程序中显示这些图像时,需要遵循一定的步骤,并注意内存管理,以防止内存泄露。 首先,我们来理解一下MFC中的Device ...

    vc下 Jpg转换Bmp方法

    在Windows环境下,Visual C++(简称VC)是一个广泛使用的C++开发工具,它提供了丰富的功能来处理各种图像格式,如JPEG(Jpg)和Bitmap(Bmp)。在VC下进行Jpg到Bmp的转换是常见的图像处理需求,这通常涉及到图像文件...

    VC6/MFC 自动拷贝屏幕/ 截屏程序

    7. **文件保存**:如果用户选择保存截图,程序需要使用`SaveBitmapToFile()`或`SaveImage()`等函数将位图保存为常见的图像格式,如BMP、JPEG或PNG。这通常涉及对图像格式的理解以及对应的编码和解码库。 8. **MFC...

    VC中GDI方法在Picture控件中显示PNG、bmp、jpg图片

    // 加载图片 CBitmap bitmap; bitmap.LoadBitmapW(L"image.png"); // 用实际的图片路径替换 // 创建兼容DC和内存DC CDC memDC; memDC.CreateCompatibleDC(&dc); // 创建兼容位图 CBitmap* pOldBitmap = ...

    VC2010 MFC 滚动条窗口显示图像

    CImage支持多种图像格式,如BMP、JPEG、PNG等,使得在程序中处理图像变得更加简单。 步骤如下: 1. **创建MFC多文档项目**: - 启动Visual Studio 2010,选择“文件”&gt;“新建”&gt;“项目”,然后在模板中选择“MFC...

    jpg转换BMP用VC来实现

    本篇文章将详细讲解如何使用C++编程语言,特别是Microsoft Visual C++(VC)环境,来实现JPEG图像到BMP图像的转换。 首先,我们需要了解JPEG(Joint Photographic Experts Group)和BMP(Bitmap)这两种图像格式的...

    vc_mfc.rar_mfc图片_vc 入门_vc mfc

    MFC中,图像主要通过CImage类来处理,这是一个包含图像数据的类,支持多种图像格式,如BMP、JPEG、PNG等。CImage类提供了丰富的成员函数,可以完成图片的加载、保存、显示以及简单的编辑操作。 1. 图片加载:CImage...

    VC打开多种图像格式(bmp,jpg,gif,tif,raw)

    在VC++ 6.0开发环境中,利用MFC(Microsoft Foundation Classes)库,可以实现对多种图像格式,如BMP、JPG、GIF、TIFF和RAW的支持。以下将详细讲解如何在VC++ 6.0中进行这些操作。 首先,你需要了解不同图像格式的...

    VC Picture控件动态加载图片文件

    2. **加载图片资源**:你需要将图片资源(如.jpg、.bmp等)添加到你的项目中。在资源编辑器中,选择Bitmap资源类型,然后导入图片文件。 3. **获取图片句柄**:使用LoadImage函数从资源中加载图片,获取到HBITMAP...

    VC实现打开BMP JPG或GIF图片

    参考文档“VC实现打开BMP JPG或GIF图片(二)VCMFC打开图片.doc”,里面详细介绍了如何使用MFC打开和显示图像。 2. **使用GDI+**: GDI+是Windows图形设备接口的增强版,提供了更强大的图像处理功能。通过创建GDI+...

    vc实现的cpictrue类可显示bmp jpg

    本文将深入探讨如何使用MFC中的自定义类`CPicture`来实现BMP和JPG图片的显示功能。这个`CPicture`类是基于MFC的窗口类`CWnd`进行扩展的,旨在提供一种简洁的方式处理图像文件。 首先,我们需要理解`CPicture`类的...

Global site tag (gtag.js) - Google Analytics