1. 程式人生 > >用CImage類來顯示PNG、JPG等圖片

用CImage類來顯示PNG、JPG等圖片

系統環境:Windows 7
軟體環境:Visual Studio 2008 SP1
本次目的:實現VC單文件、對話方塊程式顯示圖片效果

      CImage 是VC.NET中定義的一種MFC/ATL共享類,也是ATL的一種工具類,它提供增強型的(DDB和DIB)點陣圖支援,可以裝入、顯示、轉換和儲存多種格式的影象檔案,包括BMP、GIF、JPG、PNG、TIF等。CImage是一個獨立的類,沒有基類。(CImage類是基於GDI+的,從VC.NET起引進,VC 6.0中沒有。)
ATL (Active Template Library,活動模板庫)是一套基於模板的 C++ 類,用以簡化小而快的 COM

物件的編寫。
為了在MFC程式中使用CImage類,必須包含ATL的影象標頭檔案atlimage.h:(在VS08 SP1中不用包含)

#include <atlimage.h>

這是一個強大的影象處理類,下面分別詳細介紹在文件、對話方塊下的顯示圖片。

對於單文件程式:
步驟一:新增標頭檔案(由於我使用的是VS2008SP1,所以我未新增上面的標頭檔案。)
步驟二:在Doc標頭檔案裡面宣告物件,如:CImage img ;
步驟三:在Doc實現函式裡面的序列化Serialize函式

void CImagePNGDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: 在此新增儲存程式碼
    }
    else
    {
        // TODO: 在此新增載入程式碼
        if(!img.IsNull()) img.Destroy();
        img.Load(ar.GetFile()->GetFilePath());


    }
}

步驟四:在檢視View的實現檔案OnDraw()裡面

void CImagePNGView::OnDraw(CDC* pDC )
{
    CImagePNGDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: 在此處為本機資料新增繪製程式碼   
    if(!pDoc->img.IsNull()) pDoc->img.Draw(pDC->m_hDC, 0, 0);
}

完成,以上可以顯示大多數的圖片格式。

對於對話方塊程式:


步驟一:在對話方塊的標頭檔案宣告一個物件,如:CImage img ;
步驟二:在對話方塊的實現函式OnPaint()函式裡面

void CTestDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用於繪製的裝置上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使圖示在工作區矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 繪製圖標
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CPaintDC dc(this);       
        if(!img.IsNull()) img.Destroy();
        img.Load(_T("圖片3.png"));            
        if(!img.IsNull()) img.Draw(dc.m_hDC, 0, 0);
   
        CDialog::OnPaint();       
    }
}

完成。上述可實現對話方塊顯示大多數圖片。

      特別注意,只有用Load()方式才能開啟其他的圖片格式,若是用資源載入的方式,則顯示不出。下面介紹一種讓PNG透明顯示的方法:

if(!img.IsNull())img.TransparentBlt (dc.m_hDC,0,0,img.GetWidth(),img.GetHeight(),RGB(255,255,255));

相關推薦

CImage顯示PNGJPG圖片

系統環境:Windows 7 軟體環境:Visual Studio 2008 SP1 本次目的:實現VC單文件、對話方塊程式顯示圖片效果       CImage 是VC.NET中定義的一種MFC/ATL共享類,也是ATL的一種工具類,它提供增強型的(DDB和DIB)點陣

CImage顯示PNG JPG圖片

系統環境:Windows 7 軟體環境:Visual Studio 2008 SP1 本次目的:實現VC單文件、對話方塊程式顯示圖片效果       CImage 是VC.NET中定義的一種MFC/ATL共享類,也是ATL的一種工具類,它提供增強型的

Windows7無法顯示.png.jpg圖片縮圖的問題

實驗環境(藍色粗體字為特別注意內容) 1,環境:Windows 7 Ultimate 2,參考文獻http://www.xiazaizhijia.com/rjjc/20481.html 今天開啟電腦的時候突然發現電腦的.png檔案和.jpg檔案的圖示都無法正常顯示,其他格式的縮圖比如wo

springboot搭建檔案預覽解決方案,支援目前主流格式office檔案,txt檔案,pngjpg圖片以及壓縮檔案的線上預覽功能

前言 這些天在做一個檔案預覽的功能,由於之前沒有這方面的經驗,因此在市面上找了一些這方面的資料,發現目前市面上主流的檔案預覽服務是由幾家廠商提供的,做的比較好的有如永中軟體,officeweb365等,不過你們都懂得,是要收費的,所以即便做的再好,我也只能觀望觀望,然後也百

23.C++- 繼承的多種方式顯示調構造函數父子之間的同名函數virtual虛函數

vat 子類 name png 才會 項目 作用域 static 創建子類 在C++中,繼承方式共有3種: public繼承 -指父類的成員(變量和函數)訪問級別,在子類中保持不變 private繼承 -指父類的成員,在子類中變為private私有成員. -也就是說子

自己寫的一部分鬥地主的程序,沒有去寫界面,臨時是黑框顯示

cas getc vector dea 發牌 常見 dma red5 向量 這幾天比較空,所以想寫一點東西。 鬥地主的程序一直以來都想寫,但感覺規則推斷比較復雜,一直沒有較多的時間來寫。 這次主要是把跟牌和牌型的推斷寫出來了。寫了一個比較弱智的AI,屬於有牌就出

AnimatorSet編排多個動畫

轉載自:http://www.2cto.com/kf/201207/139085.html 用AnimatorSet類來編排多個動畫 在很多場景中,一個動畫的播放要依賴與另一個動畫的開始或結束。Android系統讓你把這些相互依賴的動畫繫結到一個AnimatorSet物件中,以

Unity3D的SystemInfo,獲取執行裝置硬體資訊(CPU顯示型別)可用於手機

一、概述:      UnityEngine.SystemInfo類中的屬性都是隻讀屬性,儲存著執行平臺的一些硬體資訊,找出底層平臺和硬體的功能,如:裝置的名稱、裝置的型別、顯示卡的型別,顯示卡的名稱、顯示卡供應商(製造商)、系統記憶體大小、視訊記憶體大小、支援的渲

超級簡單的壓縮pngjpgpdf教程

一、壓縮png2.選擇上傳文件3.我傳了一張冰淇淋的圖片,此時已經可以下載了,點選下載即可。這個網站會自動幫我們壓縮,中間顯示的-64%表示圖片大小減少了64%4.隨意調節壓縮大小:點選圖片,在下方通過拖動條調整壓縮大小。預覽圖上方顯示的是壓縮後的大小,調整完成後點選拖動條下

如果把PNGJPGBMP和GIF檔案批量轉換為ICO檔案?

有時候需要將大量的圖片檔案(比如PNG、JPG、BMP和GIF檔案)批量轉換為ICO圖示檔案,如果一個一個操作,非常費時間。本文將介紹如何用Dr. Folder軟體快速批量轉換圖片檔案為ICO圖示檔案,詳細的步驟如下: 下載並安裝Dr. Folder目錄博士 選擇工具選單,並開啟PNG轉

jpgpngsvggif圖片格式的區別

做了這麼久前端,圖片格式的區別你知道嗎?騰訊視訊面試問的原題哦 JPEG JPEG格式:也是應用最廣泛的圖片格式之一,它採用一種特殊的有失真壓縮演算法,將不易被人眼察覺的影象顏色刪除,從而達到較大的壓縮比(可達到2:1甚至40:1),因為JPEG格式的檔案尺寸較小,下載速度快,

位運算代替乘法除法以及取模

假設有兩個數,A和B。B為2^n,期中n>=0,A>=0。則: 要求A * B的話,則可使用<<操作符,A << n。 要求A / B的話,則可使用>>操作符,A >> n。 要求A % B的話,則可使用&

pip安裝Python的numpyscipy資料分析擴充套件庫

系統Win7(64位)Python版本:2.7.12 (64位)      在windows下安裝numpy、scipy等擴充套件庫的時候,通常有以下幾種辦法:用pip安裝(推薦);用easy_ins

常見圖片格式jpgjpegpnggif有什麼區別

文章轉載來自:http://www.colabug.com/thread-1094700-1-1.html  jpg、jpeg、png、gif、bmp、tiff、ai、cdr、eps  對於做設計這一行的人來說,這幾個圖片格式是最常用的,也是最常見的,幾乎每一天都要與他們打

無代碼軟件開發樣式定義顯示效果

如果 mark water 顯示 知識 開始 騰訊 課堂 快速開發 用樣式類定義樣式需先在項目樣式文件夾的任意一個樣式文件中寫入定義的樣式類,然後在開發過程中選中要修改樣式的元件,為元件樣式類屬性“html.styleClass”添加樣式類名稱即可:用樣式類來定義顯示效果的

為什麼列舉實現單例模式越來越流行?

前言 單例模式是 Java 設計模式中最簡單的一種,只需要一個類就能實現單例模式,但是,你可不能小看單例模式,雖然從設計上來說它比較簡單,但是在實現當中你會遇到非常多的坑,所以,繫好安全帶,上車。 單例模式的定義 單例模式就是在程式執行中只例項化一次,建立一個全域性唯一物件,有點像 Java 的靜態變數,但是

音視訊入門-20-BMPPNGJPGGIF靜態圖生成GIF動態圖

[* 音視訊入門文章目錄 *](https://www.ihubin.com/blog/audio-video-basic-catagory/) # 靜態圖 -> 動態圖 前面 [【18-手動生成一張GIF圖片】](https://www.ihubin.com/blog/audio-video-ba

BMP GIF PNG JPG圖片格式的區別和適用情況

文件 形象 err 無損 替換 顯示 獲得 行合並 效果 作者:趙鑫鏈接:https://www.zhihu.com/question/20028452/answer/142593276來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 本

Excle只允許戶輸入純文本,禁止戶修改單元格樣式格式

-a 是否 位數 -s justify ctrl align ima 密碼 背景:自己的模板給別人,讓他填完信息上傳到系統裏,但別人經常不按模板的格式來填寫,導致無法程序自動化。能不能在模板上把格式鎖住,只允許輸入純文本,但不能改格式? 方法: 步驟一,創建你要的模板

掌握uml 圖以及圖之間聚合組合關係

uml建模是設計模式以及軟體架構的前提,因此學習uml建模是必要性的。 uml 類圖以及類圖之間的關係。 uml時序圖將會在下一個部落格進行學習。該部落格僅僅作為個人學習使用,部落格中的大部分素材均來自老師的教程。 感覺老師的教程很好,所以特分享出。如有錯誤請指出。