zoukankan      html  css  js  c++  java
  • wince 显示图片

     1 #pragma once
     2 
     3 // 做成宽松的单例
     4 class COperateImage
     5 {
     6 public:
     7     void Show(CClientDC &dc, CPoint point); // point.
     8     BOOL GetPicture(const CString &strFileName);
     9     static COperateImage *GetInstance();
    10 
    11 
    12 protected:
    13     COperateImage(void);
    14 
    15 private:
    16     static COperateImage *m_pOI;
    17     static HBITMAP m_Bitmap;
    18     static CString m_strPath;
    19 
    20 private:
    21     static CString GetPathName();
    22     HBITMAP loadImageFile(const CString &strFileName);
    23     HBITMAP loadBMPImage(const CString &strFileName);
    24 
    25 public:
    26     ~COperateImage(void);
    27 //public:
    28 //    void MyBmp(CClientDC &dc);
    29 };
    View Code
      1 #include "StdAfx.h"
      2 #include "OperateImage.h"
      3 
      4 #include <initguid.h>
      5 #include <imaging.h>
      6 
      7 #pragma comment (lib,"Ole32.lib")
      8 #pragma comment (lib, "Imaging.lib")
      9 
     10 HBITMAP COperateImage::m_Bitmap = NULL;
     11 COperateImage *COperateImage::m_pOI = NULL;
     12 CString COperateImage::m_strPath = _T("");
     13 BOOL COperateImage::m_bChange = FALSE;
     14 
     15 
     16 COperateImage::COperateImage(void)
     17 {
     18 }
     19 
     20 COperateImage::~COperateImage(void)
     21 {
     22 }
     23 
     24 void COperateImage::Show(CClientDC &dc, CPoint point)
     25 {
     26     static BOOL bOnce = FALSE;
     27     if (NULL == m_Bitmap) return;
     28     if (bOnce) return;
     29     bOnce = TRUE;
     30     static CBitmap bmp1;
     31     BITMAP bm;
     32 
     33     if (m_bChange)
     34     {
     35         bmp1.Detach();
     36         bmp1.Attach(m_Bitmap);
     37         m_bChange = FALSE;
     38     }
     39     bmp1.GetBitmap(&bm);
     40 
     41     //CClientDC dc(this);
     42     CDC memDC;
     43     memDC.CreateCompatibleDC(&dc);
     44     CBitmap* pbmpOld;
     45     pbmpOld= memDC.SelectObject(&bmp1);
     46     //dc.SetStretchBltMode(COLORONCOLOR);//设置拉伸模式,否则图像会不清晰
     47     dc.StretchBlt(point.x,point.y,110/*bm.bmWidth*/,/*bm.bmHeight*/(int)(110*bm.bmHeight/bm.bmWidth),&memDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//绘制图像
     48     memDC.SelectObject(pbmpOld);
     49     memDC.DeleteDC();
     50     bOnce = FALSE;
     51     //dc.DeleteDC();
     52 }
     53 
     54 BOOL COperateImage::GetPicture( const CString &strFileName )
     55 {
     56     CString strPathName = m_strPath + strFileName;
     57     int iIndex = strFileName.ReverseFind('.');
     58     if (iIndex == -1) return FALSE;
     59     CString strRight = strFileName.Right(strFileName.GetLength() - iIndex - 1).MakeUpper();
     60     DeletePicture();
     61     if (strRight == _T("JPG"))
     62         m_Bitmap = loadImageFile(strPathName);
     63     else if (strRight == _T("BMP"))
     64         m_Bitmap = loadBMPImage(strPathName);
     65     else return FALSE;
     66     
     67     if (m_Bitmap == NULL) return FALSE;
     68 
     69     m_bChange = TRUE;
     70     return TRUE;
     71 }
     72 
     73 CString COperateImage::GetPathName()
     74 {
     75     TCHAR szPath[MAX_PATH];   
     76     GetModuleFileName(NULL, szPath, MAX_PATH);
     77     CString PathName(szPath);
     78     PathName = PathName.Left(PathName.ReverseFind(_T('\')) + 1);
     79     return PathName;
     80 }
     81 
     82 HBITMAP COperateImage::loadImageFile(const CString &strFileName)
     83 {
     84     IImagingFactory *pImgFactory =NULL;  
     85     IImage *pImage =NULL;  
     86     CoInitializeEx(NULL,COINIT_MULTITHREADED); 
     87     HBITMAP hResult =0;
     88     if   (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,  
     89         NULL,  
     90         CLSCTX_INPROC_SERVER,  
     91         IID_IImagingFactory,  
     92         (void   **)&pImgFactory)))  
     93     {  
     94         ImageInfo imageInfo;  
     95         if(SUCCEEDED(pImgFactory->CreateImageFromFile(strFileName,&pImage))  
     96             && SUCCEEDED(pImage->GetImageInfo(&imageInfo)))  
     97         {  
     98             CWindowDC dc(0);  
     99             CDC dcBitmap;  
    100             dcBitmap.CreateCompatibleDC(&dc);  
    101             hResult =CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Width,imageInfo.Height);  
    102             if(hResult)
    103             {  
    104                 HGDIOBJ   hOldBitmap   =   dcBitmap.SelectObject(hResult);
    105                 HDC safeHdc = dcBitmap.GetSafeHdc();
    106                 pImage->Draw(safeHdc,CRect(0,0,imageInfo.Width,imageInfo.Height),NULL); 
    107                 dcBitmap.SelectObject(hOldBitmap);
    108                 DeleteObject(hOldBitmap);
    109                 DeleteObject(safeHdc);
    110 
    111             }
    112             dcBitmap.DeleteDC();
    113             pImage->Release();  
    114         }
    115         pImgFactory->Release();  
    116         CoUninitialize(); 
    117     }
    118     return hResult;
    119 }
    120 
    121 COperateImage * COperateImage::GetInstance()
    122 {
    123     if (m_pOI == NULL)
    124     {
    125         m_pOI = new COperateImage();
    126         m_strPath = GetPathName();
    127     }
    128     return m_pOI;
    129 }
    130 
    131 //void COperateImage::MyBmp( CClientDC &dc )
    132 //{
    133 //    //CRect rect;   
    134 //    //GetClientRect(&rect);   
    135 //    CDC dcMem;   
    136 //    dcMem.CreateCompatibleDC(&dc);  
    137 //    CBitmap bmpBackground;   
    138 //    CString strBMPPath = GetPathName() + _T("123.bmp");
    139 //    bmpBackground.Attach(::SHLoadDIBitmap(strBMPPath));//动态加载
    140 //    BITMAP bitmap;
    141 //    bmpBackground.GetBitmap(&bitmap);
    142 //    CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);   
    143 //    dc.StretchBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcMem,0,0,   
    144 //        bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
    145 //}
    146 
    147 HBITMAP COperateImage::loadBMPImage( const CString &strFileName )
    148 {
    149     HBITMAP bitmap =  ::SHLoadDIBitmap(strFileName);
    150     return bitmap;
    151 }
    152 
    153 void COperateImage::DeletePicture()
    154 {
    155     if (m_Bitmap) DeleteObject(m_Bitmap);
    156 }
    View Code

    在这里通过单例的模式进行操作,因为我目前遇到的这个需求只是显示一张图片。

    这里读取的是程序的当前路径的图片,用户也可以进行自己修改对应的图片路径,这里可以通过show的方式显示图片,同一张图片,在一个情况下只需加载一次即可,避免多次加载产生的效率问题。cclient dc 即图片要贴的位置,通过用户自己指定。

  • 相关阅读:
    通过wireshark抓包来讲解HTTP中Connection: keep-alive头部的作用
    spring cloud连载第三篇补充之Zuul
    Redis管理各类型存储数据命令
    Redis管理key命令
    Redis命令
    Redis数据类型
    Redis配置文件
    Redis安装
    Redis简介
    SpringBoot项目报错Cannot determine embedded database driver class for database type NONE
  • 原文地址:https://www.cnblogs.com/cxiaoln/p/3597566.html
Copyright © 2011-2022 走看看