Delphi中使用GDI+进行绘图(1)

Delphi的VCL类库中,默认使用的是GDI绘图接口,该接口封装了Win32 GDI接口,能够满足基本的绘图功能,但如果要实现更高级的绘图功能,往往比较困难,GDI+是微软在GDI之后的一个图形接口,功能比GDI丰富很多,在VCL中使用GDI+,能够实现很多高级绘图功能。

目前有多种Delphi对GDI+的封装实现,以下介绍最简单的两种:

1、使用Delphi内置的GDI+接口

首先,创建一个VCL Form应用,窗口文件如下:

Pascal Code


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
object GDIPlusDemoForm1: TGDIPlusDemoForm1
  Left = 0 
  Top = 0 
  Caption = ‘GDIPlusDemoForm1‘ 
  ClientHeight = 247 
  ClientWidth = 524 
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11 
  Font.Name = ‘Tahoma‘ 
  Font.Style = []
  OldCreateOrder = False 
  PixelsPerInch = 96 
  TextHeight = 13 
  object pb1: TPaintBox
    Left = 24 
    Top = 16 
    Width = 473 
    Height = 209 
    OnPaint = pb1Paint
  end 
end 

代码如下:

Pascal Code


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
unit GDIPlusDemo1;

interface

uses 
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls,
  Winapi.GDIPAPI, Winapi.GDIPOBJ, Winapi.GDIPUTIL;

type 
  TGDIPlusDemoForm1 = class(TForm)
    pb1: TPaintBox;
    procedure pb1Paint(Sender: TObject);
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end;

var 
  GDIPlusDemoForm1: TGDIPlusDemoForm1;

implementation

{$R *.dfm}

procedure TGDIPlusDemoForm1.pb1Paint(Sender: TObject);
var 
  g: TGPGraphics;
  p: TGPPen;
  b: TGPBrush;
  r: TGPRect;
begin 
  g := TGPGraphics.Create(pb1.Canvas.Handle);
  p := TGPPen.Create(aclRed, 2);
  b := TGPSolidBrush.Create(aclAliceBlue);
  try 
    r := MakeRect(20, 20, 100, 60);
    g.FillRectangle(b, r);
    g.DrawRectangle(p, r);
  finally 
    p.Free;
    b.Free;
    g.Free;
  end;
end;

end.

以下是运行结果:

其中Winapi.GDIPAPI, Winapi.GDIPOBJ, Winapi.GDIPUTIL三个单元是Delphi提供的对GDI+的封装,可以看到使用GDI+是很方便的。

仔细看代码可以发现,使用Delphi内置的GDI+支持,还是有些不足,关键的地方是所有的绘图对象都是普通的对象,需要手工释放,增加了很多不必要的代码。

Delphi利用接口可以实现自动的垃圾收集,所以使用接口可以有效地简化代码。

http://blog.sina.com.cn/s/blog_591968570102vwsw.html

时间: 2024-10-15 00:35:42

Delphi中使用GDI+进行绘图(1)的相关文章

VS2013中使用GDI+绘图

VC范例,400多个例子源代码下载 http://download.csdn.net/detail/bigtree_mfc/7727977 VS2013中使用GDI+绘图和VC6.0不同,在VC6.0中能绘出的图像在VS2013中不会显示,原因就是在VS2013中需要添加初始化GDI+: 绘图 对话框视图类中:(绘图部分大同小异,) void **View::OnDraw(CDC *pDC){ //初始化部分 GdiplusStartupInput gdiplusStartupInput; UL

MFC中的GDI绘图<转>

一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Program Files

【VS2013中使用GDI+绘图】

VS2013中使用GDI+绘图和VC6.0不同,在VC6.0中能绘出的图像在VS2013中不会显示,原因就是在VS2013中需要添加初始化GDI+: 绘图 对话框视图类中:(绘图部分大同小异,) void **View::OnDraw(CDC *pDC) { //初始化部分 GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartu

MFC中的GDI绘图(1)

一.关于GDI的基本概念 什么是GDI         Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Progra

MFC中的GDI绘图(4)

3.创建绘图工具并选入DC 有了画布,要绘图我们必须有画笔画刷.在Windows中有HPEN.HBRUSH等GDI对象,MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen.CBrush.CFont.CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类. 一般先创建画笔(刷),然后调用CDC::SelectObject函数将画笔(刷)选入设备环境最为当前绘图工具,绘图完毕恢复设备环境以前的画笔(刷)对象,最后调用CGdiObject::Del

Delphi中canvas(画布)的运用

在DELPHI为编程者提供了一个灵活的绘图场所,即本文所述的    CANVAS类,在DELPHI中的很多控件都具有此属性,使编程者可以    在这些的控件的表面随心所欲的绘图,这对完善用户界面或者制    作一些屏幕特技都有着非凡的作用,下面举例说明几种特殊屏幕    效果的形成过程.       一.CANVAS必备基本知识:       1.具有CANVAS属性的控件:    TBitmap,TComboBox,TDBComboBox,TDBGrid,TDBListBox,TDirecto

C#中基于GDI+(Graphics)图像处理系列之前言

前言 图像处理工具类的全部源码 完整示例程序源码下载 示例程序截图 前言 图像处理是开发工程师们学习某种语言入门时就会遇到的问题,笔者刚开始接触C#使用GDI+进行图像处理,觉得太简单了,就没有深入研究,随着工作经验的积累,踏遍若干坑以后突然觉得还是有必要将这块的知识好好总结一下,毕竟还是有一些比较冷门的知识在实际应用中给我们的程序带来更多的灵活性,比如将图片保存成jpeg时进一步控制图片的质量.怎样获取任意角度旋转后的图像.怎样获取透明图像等等. 本文后面将直接放出图像处理工具类的全部源码和示

在Delphi中使用系统对应文件类型的图标

在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标.在Delphi中使用动态图标的步骤如下: 一.图标的获取 要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄.该图标通过文件关联由系统注册表决定,并且在

vs2008中使用gdi+的设置

vs2008中使用gdi+ 1.新建一个mfc工程 2.在stdafx.h文件中加入以下几行语句:#include <gdiplus.h>                //#pragma comment(lib, "gdiplus.lib") //在工程属性中添加亦可using namespace Gdiplus;            //使用GDI+的命名空间, 若不用的话每次使用Gdiplus时均加上命名空间亦可 3.修改App类在App类(以下例子中为CTestA