文档章节

GdiPlus[2]: 获取绘图表面(Graphics)

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 284
阅读 245
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>


绘图表面(Graphics, 这在 VCL 体系中叫 Canvas), 在 GdiPlus 中有四种获取方法:

1、通过窗口句柄获取;
2、通过窗口的 Canvas.Handle 获取;
3、通过 GdiPlus 利用 Helper 技术给部分 VCL 对象添加的 ToGPGraphics 方法获取;
4、通过图像对象获取.

本例效果图:



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GdiPlus, GdiPlusHelpers;

//从窗口句柄获取 IGPGraphics
procedure TForm1.Button1Click(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
begin
  Graphics := TGPGraphics.Create(Handle);
  Pen := TGPPen.Create(TGPColor.Red, 2);
  Graphics.DrawEllipse(Pen, 20, 10, 150, 40);
end;

//从 HDC 获取 IGPGraphics
procedure TForm1.Button2Click(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Pen := TGPPen.Create(TGPColor.Green, 2);
  Graphics.DrawEllipse(Pen, 20, 40, 150, 40);
end;

//使用 GdiPlusHelpers 为 Canvas 添加的 ToGPGraphics 方法获取 IGPGraphics
procedure TForm1.Button3Click(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
begin
  Graphics := Canvas.ToGPGraphics;
  Pen := TGPPen.Create(TGPColor.Blue, 2);
  Graphics.DrawEllipse(Pen, 20, 70, 150, 40);
end;

//从图像建立 IGPGraphics
procedure TForm1.Button4Click(Sender: TObject);
var
  GraphicsImg: IGPGraphics;
  Pen: IGPPen;
  Image: IGPImage;
begin
  Image := TGPBitmap.Create(152, 42);
  GraphicsImg := TGPGraphics.Create(Image);
  Pen := TGPPen.Create(TGPColor.Fuchsia, 2);
  GraphicsImg.DrawEllipse(Pen, 0, 0, Image.Width-2, Image.Height-2);

  Canvas.ToGPGraphics.DrawImage(Image, 20, 100);
end;

end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/11/1621847.html

涂孟超
粉丝 13
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
加载中
请先登录后再评论。
从零开始学习GDI+ (二) 基本概念与基本操作

从零开始学习GDI+ (一)我的第一个GDI+程序 上文给新手学习GDI+讲述了vs环境等的准备工作,并且可以直接用GDI+绘图了。本文开始,讲述的可能偏理论,建议学习的过程中大胆尝试,多使用API。...

osc_bkdv2it5
2019/08/20
1
0
Duilib的圆角矩形 抗锯齿优化 弥补RoundRect不足(网易云信borderround版本)

1、Control中的PaintBorder增加圆角矩形绘制判断 void Control::PaintBorder(IRenderContext* pRender) { if (m_strBorderColor.empty()) { return; } DWORD dwBorderColor = 0; if (!m_str......

osc_q010126d
2019/08/01
7
0
Duilib的圆环形 进度条 实现(网易云信版本)

/** @file CircleProgress.h * @brief 圆环型进度条控件,圆环中间可以有文本(如85%) * @copyright (c) 2019-2022, NetEase Inc. All rights reserved * @author Xuhuajie * @date 2019/8......

osc_1z8ghska
2019/08/14
5
0
GdiPlus 一个给 Delphi 提供的新的 GDI+ 接口很好用!

尽管 GDI+ 已经有近 10 年的历史(随 Win2000 推出), 尽管 DirectX 如日中天, 但在 Windows 7 之前的版本下进行 2D 绘图还是离不开它, 微软也没有停止对它的升级, 随 Vista 的 GDI 版本是 1....

osc_odfa308v
2019/08/28
3
0
MFC边框重绘

? 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 50 51 52 53 54 55 56 pragma once incl......

江河海流
2016/01/30
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Android | Tangram动态页面之路(七)硬核的Virtualview

何为Virtualview,简单来说,就是通过xml来描述视图,然后压缩成二进制格式,客户端通过解析并渲染成原生view或交由Canvas绘制的过程。 系列文章: 需求背景 Tangram和vlayout介绍 Tangram的...

哈利迪
17分钟前
9
0
深入理解 Java 乱码问题

前言 这段时间在看 TCP/IP 网络通信这块,好奇我的电脑和局域网中电脑怎样通信,又怎样外网通信,Mysql 相关的博客延期执行了。 好久没写博客了,就把以前的博客整理一下,发布到自己的网站上...

万古云霄
18分钟前
27
0
如何监控 Linux 服务器状态?

Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展。 本文介绍的几个命令,不仅仅适用于服务...

良许Linux
33分钟前
13
0
springboot整合mybatis_plus

码云代码链接: https://gitee.com/liselotte/spring-boot-mp-demo

zhengzhixiang
39分钟前
11
0
BIO、NIO、AIO、Netty面试题

https://juejin.im/post/5e9421836fb9a03c7b3051bb

JaneRoad
47分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部