主要使用GDIPlus中提供的抗锯齿的方法,主要有Delphi和C++下的应用代码。采用的GDI+为1.0。在D2007中初次使用GDI+时,会提示DirectDraw文件中PDirectDrawSurface的一些错误,修改方法为将:
{$IFDEF COMPILER5_UP} PDirectDrawSurface = Pointer; {$ELSE} PDirectDrawSurface = IDirectDrawSurface; {$ENDIF}
修改为:
{$IFDEF COMPILER5_UP} PDirectDrawSurface = Pointer; {$ELSE} PDirectDrawSurface = Pointer; {$ENDIF}
Delphi GDI+抗锯齿方法的使用:
var graphics : TGPGraphics; pen: TGPPen; begin graphics := TGPGraphics.Create(DC); Graphics.SetSmoothingMode(SmoothingModeAntiAlias);//.SmoothingMode := TGPSmoothingMode(5); pen:= TGPPen.Create(MakeColor(255, 0, 0, 255)); pen.SetWidth(1); graphics.DrawLine(pen, 0, 50, 200, 100); graphics.Free; pen.Free; end;
SetSmoothingMode方法可使用参数如下: SmoothingModeInvalid SmoothingModeDefault SmoothingModeHighSpeed SmoothingModeHighQuality SmoothingModeNone SmoothingModeAntiAlias
参数说明如下:
SmoothingModeInvalid =-1;{指定一个无效模式}
SmoothingModeDefault =0; {指定不消除锯齿}
SmoothingModeHighSpeed =1; {指定高速度、低质量呈现}
SmoothingModeHighQuality=2; {指定高质量、低速度呈现}
SmoothingModeNone =3; {指定不消除锯齿}
SmoothingModeAntiAlias =4; {指定消除锯齿的呈现}
更多内容见万一的博客:
http://www.pujipc.com/html/biancheng/Delphi/20090205/11493.html
C++中的使用方法如下:
#include <afxdtctl.h> #include <gdiplus.h> #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus; // Initialize GDI+ GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); HDC hdc = GetDC(hWnd); Graphics graphics(hdc); Pen pen(Color(255, 0x00, 0x00, 0x00), 0.5); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeHighSpeed); graphics.DrawLine(&pen, 150, 10, 250, 30); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeAntiAlias); graphics.DrawLine(&pen, 300, 10, 400, 30); graphics.SetSmoothingMode(SmoothingMode::SmoothingModeHighQuality); graphics.DrawLine(&pen, 450, 10, 550, 30);