文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 671
阅读 9
收藏 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
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(630) : ......

xxdd
2013/10/24
65
0
第155天:canvas(二)

一、添加样式和颜色 在前面的绘制矩形章节中,只用到了默认的线条和颜色。 如果想要给图形上色,有两个重要的属性可以做到。 设置图形的填充颜色 设置图形轮廓的颜色   备注: 1 function...

半指温柔乐
2018/01/24
0
0
ABBYY找不到图片如何处理

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

ABBYY
2016/09/18
14
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A...

阿里云官方博客
43分钟前
1
0
Coding and Paper Letter(四十四)

资源整理。 1 Coding: 1.Rstudio2019年会“机器学习应用”的幻灯片,代码和数据 rstudio conf 2019 2.R语言包sparkxgb,Spark上XGBoost的R接口。 sparkxgb 3.自动SQL注入和数据库接管工具。 ...

胖胖雕
45分钟前
3
0
Ubuntu最新的主要操作系统放弃32位支持?

现在是2018年,2019年即将到来——64位处理器已经成为主流很长一段时间了。如果你仍然使用32位的电脑,那么是时候把它扔进垃圾箱了。 我为所有基于Linux的操作系统维护者感到自豪,他们有勇气...

Linux就该这么学
46分钟前
1
0
Fundebug发布Vue插件,简化BUG监控接入代码

摘要: 代码越短越好! 我们发布了fundebug-vue插件,可以简化Vue框架接入Fundebug的代码。 Vue如何接入Fundebug 1. 安装fundebug-javascript与fundebug-vue npm install fundebug-javascrip...

Fundebug
54分钟前
2
0
MySQL学习笔记之二

数据库的操作总结就是:增删改查(CURD),今天记录一下基础的检索查询工作。 检索MySQL 1.查询表中所有的记录 mysql> select * from apps;+----+------------+-----------------------+------...

凌宇之蓝
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部