軟件平臺:WinXP + VC++ 6.0 + GDI+
GDI+是Windows XP中的一個子系統(tǒng),它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。顧名思義,GDI+是以前版本GDI的 繼承者,出于兼容性考慮,Windows XP仍然支持以前版本的GDI,但是在開發(fā)新應用程序的時候,開發(fā)人員為了滿足圖形輸出需要應該使用GDI+,因為GDI+對以前的Windows版本中 GDI進行了優(yōu)化,并添加了許多新的功能。
遺憾的是,VC6.0并不能直接使用GDI+,下面介紹一種很方便的在VC6.0中使用GDI+的方法。
步驟如下:
1.將GDI+.rar將其中的Includes和Lib中的文件拷到vc目錄下的Includes和Lib文件夾中;
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 文章來源:本站原創(chuàng) 點擊數:3422 更新時間:2007-3-10 15:42:48
原帖及討論:http://bbs.bc-cn.net/dispbbs.asp?BoardID=55&ID=102037
進來總看到一些網友提出一些關于圖形處理方面的問題.
例如怎樣使一個字符串透明輸出,怎樣放大,縮小或旋轉一幅圖片,或將一幅bmp圖片保存為jpg格式,我總是回答使用GDI+圖形函數,那么怎樣使用呢?
下面是我寫的一個簡易教程,第一次寫教程,難免有疏漏還請各位網友指正批評.
GDI+圖形函數,一個組在.net環(huán)境下提供的以取代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);//創(chuàng)建一個Graphics對象
SolidBrush brush(Color(100,0,0,255));//創(chuàng)建一個筆刷 第一項是透明度 后三項是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考到工程目錄下