VC利用GDI+顯示透明的PNG圖片

1.在你將要使用GDI+的工程中,完成初始化工作,將以下代碼加入StdAfx.h頭文件中:

//加入的頭文件
#include <comdef.h>//初始化一下com口
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
#pragma comment(lib,"gdiplus.lib")

2.在程序初始化部分加入

//gdi+用到的兩個變量   裝載gdi+
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;
    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

3.在程序退出部分前加入
    //卸載gdi+
    GdiplusShutdown(m_pGdiToken);

5在Project->stting->Link->Object/libary中加入gdiplus.lib

這樣你的工程就可以使用GDI+了:

void CPNGDlg::OnButton1()
{
pDC =GetDC();
Graphics graphics( pDC->m_hDC);
Image image(L"walkman.png", FALSE);
graphics.DrawImage(&image, 10,10);
}


GDI+是Windows XP中的一個子系統,它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。顧名思義,GDI+是以前版本GDI的繼承者,出於兼容性考慮,Windows XP仍然支持以前版本的GDI,但是在開發新應用程序的時候,開發人員爲了滿足圖形輸出需要應該使用GDI+,因爲GDI+對以前的Windows版本中GDI進行了優化,並添加了許多新的功能。

     遺憾的是,VC6.0並不能直接使用GDI+,下面介紹一種很方便的在VC6.0中使用GDI+的方法。步驟如下:

1.將GDI+.rar將其中的Includes和Lib中的文件拷到vc目錄下的Includes和Lib文件夾中;

GDI+ for VC6.0 SDK下載地址:

http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip

2.在你將要使用GDI+的工程中,完成初始化工作:

將以下代碼加入StdAfx.h頭文件中:

//加入的頭文件
#include <comdef.h>//初始化一下com口
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
#pragma comment(lib,"gdiplus.lib")

3.在程序初始化部分加入

//gdi+用到的兩個變量   裝載gdi+
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;
    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

4在程序退出部分前加入
    //卸載gdi+
    GdiplusShutdown(m_pGdiToken);

5在Project->stting->Link->Object/libary中加入gdiplus.lib

這樣你的工程就可以使用GDI+了:

void CPNGDlg::OnButton1()
{
pDC =GetDC();
Graphics graphics( pDC->m_hDC);
Image image(L"walkman.png", FALSE);
graphics.DrawImage(&image, 10,10);
}


用GDI+如何顯示透明背景的PNG文件?樓主ruchimy(泥秋)2005-05-26 17:16:14 在 VC/MFC / 圖形處理/算法 提問
我使用如下代碼:  
ImageAttributes imAtt;
imAtt.SetColorKey(Color(0,0,0),Color(10,10,10),ColorAdjustTypeDefault);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
Image imageBlue(TEXT(".\\res\\NumbersBlue.png"));
graphics.DrawImage (&imageYear,Rect(cx,0,iYearWidth,iYearHeight),0,iYearHeight,iYearWidth,iYearHeight,UnitPixel,&imAtt);
   
顯示的圖片雖然是透明的,但邊邊有黑點.哪位高手能指點一下?

直接顯示就可以了,   透明是GDI+自己處理的,


在VC6.0時邊要加入以下三句到stdafx.h裏邊

#define ULONG_PTR ULONG
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")

不要再使用OleLoadPicture了,那會讓你看起來很愚蠢。同樣功能的函數,你看看GDI+會有幾行:

HRESULT ShowPic(const TCHAR* lpstrFile, HDC hDC, int X, int Y, int iWidth, int iHeight)
{
_ASSERT(lpstrFile);
USES_CONVERSION;

// Create bitmap object and load image
auto_ptr<Bitmap> pBmp(new Bitmap(CT2CW(lpstrFile)));
if(!pBmp.get() || Ok != pBmp->LastStatus())
return E_FAILED;

// Draw bitmap on DC
Graphic grp(hDC);
if(Ok != grp.DrawImage(pBmp.get(), X, Y, iWidth, iHeight))
return E_FAILED;
return S_OK;
}

在vc6.0中使用GDI+圖形函數
作者:radcat    文章來源:本站原創    點擊數:3422    更新時間:2007-3-10 15:42:48

原帖及討論:http://bbs.bc-cn.net/dispbbs.asp?BoardID=55&ID=102037

進來總看到一些網友提出一些關於圖形處理方面的問題.

例如怎樣使一個字符串透明輸出,怎樣放大,縮小或旋轉一幅圖片,或將一幅bmp圖片保存爲jpg格式,我總是回答使用GDI+圖形函數,那麼怎樣使用呢?

下面是我寫的一個簡易教程,第一次寫教程,難免有疏漏還請各位網友指正批評.

GDI+圖形函數,一個組在.net環境下提供的以取代GDI圖形函數的類,將來會逐漸取代GDI圖形函數.

如果在vc6.0中使用gdi+圖形函數,那麼請按以下步驟操作:

1.下載下面的rar文件將其中的Includes和Lib中的文件拷到vc目錄下的Includes和Lib文件夾中.

點擊下載該文件

2新建一個工程(以winsdk框架爲例mfc也相同)

將以下代碼加入StdAfx.h頭文件中

//加入的頭文件
#include <comdef.h>//初始化一下com口

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
//結束

3在程序初始化部分加入

//gdi+用到的兩個變量
    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;
    //裝載gdi+
    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

4在程序退出部分前加入

    //卸載gdi+
            GdiplusShutdown(m_pGdiToken);

5在Project->stting->Link->Object/libary中加入gdiplus.lib

好了經過上面幾步我們就可以在程序中使用GDI+了,先試一下吧!

顯示一個透明字符串

    Graphics mygraphics(hdc);//創建一個Graphics對象
    SolidBrush brush(Color(100,0,0,255));//創建一個筆刷 第一項是透明度 後三項是RGB值
    FontFamily fontFamily(L"Latha");選擇一種字體
    Font font(&fontFamily,1,FontStyleRegular,UnitInch);
    PointF pointF(5,5);

    mygraphics.DrawString(L"Hello Word!",-1,&font,pointF,&brush);

或顯示一幅jpg圖像

Graphics imgraphics(hdc);
Image image(L"001.jpg");
imgraphics.DrawImage(&image,0,0);

注意要把001.jpg考到工程目錄下

下面是一個例子有興趣的可以下載


http://bbs.bc-cn.net/viewFile.asp?BoardID=55&ID=13660

以上是我寫的,請望能給大家一些幫助


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章