文档章节

GdiPlus[43]: IGPGraphics (二) 关于文本绘制

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 671
阅读 4
收藏 0
点赞 0
评论 0

IGPGraphics 中绘制文本相关的方法和属性:

IGPGraphics.DrawString();             { 绘制文本 }
IGPGraphics.MeasureString();          { 获取指定格式的字符串需要的矩形 }

IGPGraphics.MeasureCharacterRanges(); { 获取指定字符所在的区域 }

IGPGraphics.DrawDriverString();       { 绘制可指定间距的文本 }
IGPGraphics.MeasureDriverString();    { 获取可指定间距文本所需要的矩形范围 }

IGPGraphics.TextRenderingHint;        { 获取或设置文本呈现模式 }
IGPGraphics.TextContrast;             { 灰度校正值(消除锯齿和 ClearType 文本的伽玛值校正: 0..12, 默认是 4) }


 
 
 
 
 

 

 

  

DrawString 的三种用法:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  str: string;
  Font: IGPFont;
  Pt: TGPPointF;
  Brush: IGPSolidBrush;
  StringFormat: IGPStringFormat;
  Rect: TGPRectF;
begin
  Graphics := TGPGraphics.Create(Handle);
  //
  str := 'Delphi 2010';
  Font := TGPFont.Create('Arial Black', 16);
  Pt.Initialize(0, 10);
  Brush := TGPSolidBrush.Create($FF228B22);
  Graphics.DrawString(str, Font, Pt, Brush);
  //
  Pt.X := ClientWidth;
  Brush.Color := $FF0000FF;
  StringFormat := TGPStringFormat.Create([StringFormatFlagsDirectionRightToLeft]);
  Graphics.DrawString(str, Font, Pt, StringFormat, Brush);
  //
  Brush.Color := $FFFF0000;
  Rect.Initialize(0, 0, ClientWidth, ClientHeight);
  StringFormat.FormatFlags := [StringFormatFlagsDirectionVertical];
  StringFormat.Alignment := StringAlignmentCenter;
  StringFormat.LineAlignment := StringAlignmentCenter;
  Graphics.DrawString(str, Font, Rect, StringFormat, Brush);
end;

 
 
 
 
 

 

 

  

MeasureString 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  str: string;
  Font: IGPFont;
  Pt: TGPPointF;
  Brush: IGPSolidBrush;
  Pen: IGPPen;
  StringFormat: IGPStringFormat;
  Rect, MeasureRect: TGPRectF;
begin
  Graphics := TGPGraphics.Create(Handle);
  Graphics.Clear($FFFFFFFF);
  Brush := TGPSolidBrush.Create($FF228B22);
  Pen := TGPPen.Create($FF000000);
  //
  str := 'Delphi 2010';
  Font := TGPFont.Create('Arial Black', 16);
  Pt.Initialize(10, 10);

  Graphics.DrawString(str, Font, Pt, Brush);
  MeasureRect := Graphics.MeasureString(str, Font, Pt, nil);
  Graphics.DrawRectangle(Pen, MeasureRect);

  //
  Brush.Color := $FFFF0000;
  Rect.Initialize(0, 0, ClientWidth, ClientHeight);
  StringFormat := TGPStringFormat.Create;
  StringFormat.Alignment := StringAlignmentCenter;
  StringFormat.LineAlignment := StringAlignmentCenter;

  Graphics.DrawString(str, Font, Rect, StringFormat, Brush);
  MeasureRect := Graphics.MeasureString(str, Font, Rect, StringFormat);
  Graphics.DrawRectangle(Pen, MeasureRect);
end;

 
 
 
 
 

 

 

  

SetMeasurableCharacterRanges 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  str: string;
  Font: IGPFont;
  CharRange1,CharRange2: TGPCharacterRange;
  CharRanges: IGPCharacterRanges;
  Rect: TGPRectF;
  StringFormat: IGPStringFormat;
  Brush,BrushBack: IGPBrush;
  Regions: IGPRegions;
  R1,R2: TGPRectF;
begin
  Graphics := TGPGraphics.Create(Handle);
  str := '万一的 Delphi 博客';
  Font := TGPFont.Create('微软雅黑', 20);
  Brush := TGPSolidBrush.Create($FFFF0000);
  BrushBack := TGPSolidBrush.Create($FFC0C0C0);

  CharRanges := TGPArray<TGPCharacterRange>.Create(2);
  CharRange1.Initialize(0, 2);
  CharRange2.Initialize(4, 6);
  CharRanges[0] := CharRange1;
  CharRanges[1] := CharRange2;

  StringFormat := TGPStringFormat.Create;
  StringFormat.SetMeasurableCharacterRanges(Charranges);

  Rect.Initialize(20, 20, ClientWidth, ClientHeight);

  Regions := Graphics.MeasureCharacterRanges(str, Font, Rect, StringFormat);
  Regions[0].GetBounds(R1, Graphics);
  Regions[1].GetBounds(R2, Graphics);
  Graphics.FillRectangle(BrushBack, R1);
  Graphics.FillRectangle(BrushBack, R2);

  Graphics.DrawString(str, Font, Rect.Location, Brush);
end;

 
 
 
 
 

 

 

  

DrawDriverString 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Font: IGPFont;
  Brush: IGPSolidBrush;
  Pts: array of TGPPointF;
  str: string;
  i: Integer;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Brush := TGPSolidBrush.Create($FF8A2BE2);

  str := 'ABCDEFG';
  SetLength(Pts, Length(str));
  for i := 0 to Length(str) - 1 do
  begin
    Pts[i].X := i * 50 + 20;
    Pts[i].Y := 60;
  end;

  Font := TGPFont.Create('Arial Black', 32);
  Graphics.DrawDriverString(PUint16(PChar(str)),
                            Length(str),
                            Font,
                            Brush,
                            @Pts[0],
                            [DriverStringOptionsCmapLookup],
                            nil
  );
end;

 
 
 
 
 

 

 

  

IGPGraphics.TextRenderingHint 测试:



{
TextRenderingHintSystemDefault            // 使用字体的默认设置
TextRenderingHintSingleBitPerPixelGridFit // 符号位图 + hinting 技术(改善字符主干和弯曲部分)
TextRenderingHintSingleBitPerPixel        // 符号位图(不使用 hinting 技术时字体会更宽一些)
TextRenderingHintAntiAliasGridFit         // 消除锯齿 + hinting 技术
TextRenderingHintAntiAlias                // 消除锯齿
TextRenderingHintClearTypeGridFit         // ClearType 文本 + hinting 技术
}

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Brush: IGPSolidBrush;
  Font: IGPFont;
  Pt: TGPPointF;
begin
  Graphics := TGPGraphics.Create(Handle);
  Brush := TGPSolidBrush.Create($FFB22222);
  Font := TGPFont.Create('Arial Black', 24);

  Pt.Initialize(10, 10);
  Graphics.TextRenderingHint := TextRenderingHintSystemDefault;
  Graphics.DrawString('SystemDefault', Font, Pt, Brush);

  Pt.Y := Pt.Y + Font.GetHeight(Graphics) + 10;
  Graphics.TextRenderingHint := TextRenderingHintSingleBitPerPixelGridFit;
  Graphics.DrawString('SingleBitPerPixelGridFit', Font, Pt, Brush);

  Pt.Y := Pt.Y + Font.GetHeight(Graphics) + 10;
  Graphics.TextRenderingHint := TextRenderingHintSingleBitPerPixel;
  Graphics.DrawString('SingleBitPerPixel', Font, Pt, Brush);

  Pt.Y := Pt.Y + Font.GetHeight(Graphics) + 10;
  Graphics.TextRenderingHint := TextRenderingHintAntiAliasGridFit;
  Graphics.DrawString('AntiAliasGridFit', Font, Pt, Brush);

  Pt.Y := Pt.Y + Font.GetHeight(Graphics) + 10;
  Graphics.TextRenderingHint := TextRenderingHintAntiAlias;
  Graphics.DrawString('AntiAlias', Font, Pt, Brush);

  Pt.Y := Pt.Y + Font.GetHeight(Graphics) + 10;
  Graphics.TextRenderingHint := TextRenderingHintClearTypeGridFit;
  Graphics.DrawString('ClearTypeGridFit', Font, Pt, Brush);
end;

 
 
 
 
 

 

 

  

//后接 "关于文本绘制续"

 
 
 
 
 

 

 

  

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 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
509
0
怎样解决ABBYY FineReader中的图片未检测到问题

ABBYY FineReader是一款OCR文字识别软件,使用ABBYY FineReader识别带有图片的文档时,图片区域标识文档中所包含的图片。如果不想识别某一文本片段,也可使用“图片”区域,如果程序自动检测...

ABBYY
2015/10/19
54
0
ABBYY找不到图片如何处理

ABBYY FineReader 12是一款图文识别(OCR)软件,使用ABBYY FineReader 12识别带有图片的文档时,图片区域标识文档中所包含的图片。如果不想识别某一文本片段,也可使用“图片”区域,如果程序...

ABBYY
2016/09/18
14
0
几何画板里怎样打根号符号

在几何画板中,我们常常需要编辑带根号的数字或者绘制带根号的函数图像,那么怎么才能很轻松地就编辑出来呢?下面将通过举例详细介绍几何画板里怎样打根号符号。 一、编辑带根号的数字 打开几...

学术研究软件
2016/05/18
82
1
Html5 学习系列(五)Canvas绘图API快速入门(2)

Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来。接下里我会在本文中给各位介绍Canvas的其他API:绘制线条、绘制椭圆、绘制图片、图片处理等...

aicoder
2014/08/29
0
0
如何解决ABBYY FineReader中表格检测不到问题

ABBYY FineReader 12是一款OCR文字识别软件,使用ABBYY FineReader识别带有表格的文档时,表格区域对以表格形式排列的表格或文本片断进行标记,但有时会出现程序自动检测表格失败的现象,需使...

ABBYY
2015/10/16
398
0
怎么用化学绘图软件写带括号的分子式

ChemDraw是一款国际通用的化学绘制工具,广泛应用于绘制各种化学结构式,包括结构式、能量图谱、方程式、生物聚合物以及分子式等。对于化学分子式带括号的情况,学习化学的同学都司空见惯,但...

学术研究软件
2016/10/11
3
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
85
0
如何让几何画板中点与点的坐标一起移动

几何画板是一款非常受老师所青睐的教程软件,很多在黑板上无法实现的效果都可以在几何画板里实现,让老师的课程变得更加有趣。在使用过程中很多的用户朋友会遇到各种问题,这个时候就需要了解...

学术研究软件
2016/06/03
46
0
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:program filesmicrosoft sdkswindowsv7.0aincludegdiplusheaders.h(630) : 参见“G......

xxdd
2013/10/24
60
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部