文档章节

GdiPlus[42]: IGPGraphics (一)

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

//方法
IGPGraphics.DrawLine();               { 画线 }
IGPGraphics.DrawLines();              { 画一组线 }
IGPGraphics.DrawArc();                { 画弧线 }
IGPGraphics.DrawBezier();             { 画 Bezier 线 }
IGPGraphics.DrawBeziers();            { 画一组 Bezier 线 }
IGPGraphics.DrawRectangle();          { 画矩形 }
IGPGraphics.DrawRectangles();         { 画一组矩形 }
IGPGraphics.DrawEllipse();            { 画椭圆 }
IGPGraphics.DrawPie();                { 画饼形 }
IGPGraphics.DrawPolygon();            { 画多边形 }
IGPGraphics.DrawCurve();              { 画曲线 }
IGPGraphics.DrawClosedCurve();        { 画闭合曲线 }
IGPGraphics.DrawPath();               { 画路径 }

IGPGraphics.FillRectangle();          { 填充矩形 }
IGPGraphics.FillRectangles();         { 填充一组矩形 }
IGPGraphics.FillPolygon();            { 填充多边形 }
IGPGraphics.FillEllipse();            { 填充椭圆 }
IGPGraphics.FillPie();                { 填充饼形 }
IGPGraphics.FillPath();               { 填充路径 }
IGPGraphics.FillClosedCurve();        { 填充闭合曲线 }
IGPGraphics.FillRegion();             { 填充区域 }

IGPGraphics.DrawImage();              { 呈现图像 }
IGPGraphics.DrawCachedBitmap();       { 呈现 CachedBitmap 图像 }
IGPGraphics.AddMetafileComment();     { 向当前 Metafile 添加注释 }
IGPGraphics.EnumerateMetafile();      { 枚举 Metafile 中的图形命令 }

IGPGraphics.DrawString();             { 绘制文本 }
IGPGraphics.MeasureString();          { 获取指定格式的字符串需要的矩形 }
IGPGraphics.DrawDriverString();       { 绘制可指定间距的文本 }
IGPGraphics.MeasureDriverString();    { 获取可指定间距文本所需要的矩形范围 }
IGPGraphics.MeasureCharacterRanges(); { 获取指定字符所在的区域 }

IGPGraphics.SetClip();                { 设置 Graphics 的绘图区域 }
IGPGraphics.IntersectClip();          { 通过相交运算设置新的剪切区域 }
IGPGraphics.ExcludeClip();            { 减去剪切区域 }
IGPGraphics.ResetClip;                { 重置剪切区域 }
IGPGraphics.TranslateClip();          { 平移剪切区域 }
IGPGraphics.IsVisible();              { 判断指定的点或矩形是否包含在 Graphics 可见剪切区域内 }

IGPGraphics.Clear();                  { 清除绘图表面并以指定背景色填充 }
IGPGraphics.Save;                     { 保存 Graphics 当前状态 }
IGPGraphics.Restore();                { 恢复由 Save 保存的状态 }
IGPGraphics.Flush();                  { 强制执行所有挂起的图形操作并立即返回而不等待操作完成 }
IGPGraphics.GetNearestColor();        { 获取与指定颜色参数最接近的系统颜色 }
IGPGraphics.GetHDC;                   { 获取 Graphics 关联的 HDC }
IGPGraphics.ReleaseHDC();             { 释放 Graphics 关联的 HDC }
IGPGraphics.GetRenderingOrigin();     { 获取原点 }
IGPGraphics.SetRenderingOrigin();     { 设置原点 }

IGPGraphics.MultiplyTransform();      { 将 Graphics 的世界变换乘以指定的 Matrix }
IGPGraphics.TranslateTransform();     { 平移变换 }
IGPGraphics.ScaleTransform();         { 放缩变换 }
IGPGraphics.RotateTransform();        { 旋转变换 }
IGPGraphics.ResetTransform;           { 重置变换 }

IGPGraphics.BeginContainer();         { 保存之前的状态, 并开始一个新的状态 }
IGPGraphics.EndContainer();           { 还原由 BeginContainer 保存的状态 }

IGPGraphics.TransformPoints();        { 将点数组转换坐标空间 }

//属性
IGPGraphics.DpiX;                     { 获取 Graphics 水平分辨率 }
IGPGraphics.DpiY;                     { 获取 Graphics 垂直分辨率 }
IGPGraphics.RenderingOrigin;          { 原点 }
IGPGraphics.PageScale;                { 获取或设置 Graphics 的全局单位和页单位之间的比例 }
IGPGraphics.PageUnit;                 { 获取或设置 Graphics 中页坐标的度量单位 }
IGPGraphics.Transform;                { 获取或设置矩阵变换 }

IGPGraphics.CompositingMode;          { 前景色与背景色的合成混合模式 }
IGPGraphics.InterpolationMode;        { 插补模式 }
IGPGraphics.PixelOffsetMode;          { 像素的偏移模式 }
IGPGraphics.CompositingQuality;       { 图像合成质量 }
IGPGraphics.SmoothingMode;            { 绘图质量 }
IGPGraphics.TextRenderingHint;        { 获取或设置文本呈现模式 }
IGPGraphics.TextContrast;             { 获取或设置文本灰度校正值(消除锯齿和 ClearType 文本的伽玛值校正: 0..12, 默认4) }

IGPGraphics.Clip;                     { 获取或设置 Graphics 的绘图区域 }
IGPGraphics.ClipBounds;               { 获取剪切区域的矩形边界; 浮点型 }
IGPGraphics.ClipBoundsI;              { 获取剪切区域的矩形边界; 整型 }
IGPGraphics.VisibleClipBounds;        { 可见的剪切区域的矩形边界; 浮点型 }
IGPGraphics.VisibleClipBoundsI;       { 可见的剪切区域的矩形边界; 整型 }
IGPGraphics.IsClipEmpty;              { 剪切区域是否为空 }
IGPGraphics.IsVisibleClipEmpty;       { 可见的剪切区域是否为空 }

 
 
 
 
 

 

 

  

关于剪切区域的例子:



uses GdiPlus;

var
  Graphics: IGPGraphics;
  Image: IGPImage;

procedure TForm1.FormCreate(Sender: TObject);
var
  Rect1, Rect2: TGPRect;
  Path1, Path2: IGPGraphicsPath;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\ImageFileSmall.jpg');

  Graphics := TGPGraphics.Create(Handle);
  Rect1.Initialize(20, 20, 120, 120);
  Rect2.Initialize(120, 20, 120, 120);

  Path1 := TGPGraphicsPath.Create;
  Path2 := TGPGraphicsPath.Create;
  Path1.AddEllipse(Rect1);
  Path2.AddEllipse(Rect2);

  Graphics.SetClip(Path1);
  Graphics.SetClip(Path2, CombineModeUnion);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  if not Graphics.IsVisibleClipEmpty then
  begin
    Graphics.SetClip(Graphics.VisibleClipBoundsI, CombineModeIntersect);
    Graphics.DrawImage(Image, 10, 10);
  end;
end;

 
 
 
 
 

 

 

  

PageUnit、PageScale 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
  Rect: TGPRect;
begin
  Graphics := TGPGraphics.Create(Handle);
  Rect.Initialize(20, 20, 200, 150);

  Pen := TGPPen.Create($FFC0C0C0, 3);
  Graphics.DrawRectangle(Pen, Rect);

  Graphics.PageUnit := UnitDocument; { PageScale 只在页面坐标下有效 }
  Graphics.PageScale := 1.0; //默认
  Pen.Color := $FF0000FF;
  Graphics.DrawRectangle(Pen, Rect);

  Pen.Color := $FFFF0000;
  Graphics.PageScale := 2.0;
  Graphics.DrawRectangle(Pen, Rect);
end;

 
 
 
 
 

 

 

  

BeginContainer、EndContainer 前者是开始变换, 后者是重置到变换之前的状态:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
  Rect: TGPRect;
begin
  Graphics := TGPGraphics.Create(Handle);
  Rect.Initialize(60, 60, 100, 100);

  Pen := TGPPen.Create($FFC0C0C0, 2);
  Graphics.DrawRectangle(Pen, Rect);

  Pen.Color := $FF0000FF;
  Tag := Graphics.BeginContainer;
    Graphics.RotateTransform(18);
    Graphics.DrawRectangle(Pen, Rect);
  Graphics.EndContainer(Tag);

  Pen.Color := $FFFF0000;
  Tag := Graphics.BeginContainer;
    Graphics.RotateTransform(-18);
    Graphics.DrawRectangle(Pen, Rect);
  Graphics.EndContainer(Tag);
end;

//用 Save 和 Restore 重复实现的代码:
uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
  Rect: TGPRect;
begin
  Graphics := TGPGraphics.Create(Handle);
  Rect.Initialize(60, 60, 100, 100);

  Pen := TGPPen.Create($FFC0C0C0, 2);
  Graphics.DrawRectangle(Pen, Rect);

  Pen.Color := $FF0000FF;
  Tag := Graphics.Save;
  Graphics.RotateTransform(18);
  Graphics.DrawRectangle(Pen, Rect);
  Graphics.Restore(Tag);

  Pen.Color := $FFFF0000;
  Graphics.Restore(Tag);
  Graphics.RotateTransform(-18);
  Graphics.DrawRectangle(Pen, Rect);
  Graphics.Restore(Tag);
end;

 
 
 
 
 

 

 

  

原点(RenderingOrigin 它变换是两回事)与阴影画刷的测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Brush: IGPHatchBrush;
  Rect: TGPRect;
begin
  Graphics := TGPGraphics.Create(Handle);
  Brush := TGPHatchBrush.Create(HatchStyleSolidDiamond, $FF8B0000, $FFFFD700);

  Rect.Initialize(10, 10, 108, 60);
  Graphics.SetRenderingOrigin(0, 0); //这是默认值
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.SetRenderingOrigin(Rect.X, Rect.Y + Trunc(Graphics.Transform.OffsetY));
  Graphics.FillRectangle(Brush, Rect);
end;

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
求助:fedora 14 用wine安装rtx 失败

公司用RTX交流,现在因为学习安装了fedora 14系统,想用RTX,于是装上了WINE1.3,再安装winetricks, 安装库文件winetricks msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1, 再安...

我勒个去也 ⋅ 2011/11/04 ⋅ 9

GDI+里面的问题。。。。。。。。。。

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

xxdd ⋅ 2013/10/24 ⋅ 0

vs 2005 添加GDI配置

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

种地瓜 ⋅ 2015/12/08 ⋅ 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 ⋅ 0

VS2008中使用GDI+

include <objbase.h> #include <gdiplus.h> #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus; 定义全局 无符号长整形指针 ULONGPTR 如 ULONGPTR gdiplusupToken; 在构造函数里......

ryany ⋅ 2011/03/20 ⋅ 0

MFC用GDI+动感歌词的制作

源代码:http://download.csdn.net/detail/nuptboyzhb/4219669 源代码: 1. 插入一个对话框的资源,删除默认控件,并为对话框创建一个类,命名为ClyricDlg; 2. 在对话框的头文件中添加GDI+相...

长平狐 ⋅ 2012/10/08 ⋅ 0

在DLL中调用createwindows,报错1407

//初始化 AtlAxWinInit(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); //名字和当......

哈大哈傻瓜 ⋅ 2016/03/27 ⋅ 0

VC中使用GDI+实现为按钮加载Png图片

VC中使用GDI+实现为按钮加载Png图片 作者:flyfish 2010-3-15 一、在stdafx.h文件中添加头文件,命名空间,库的引用, #include usingnamespaceGdiplus; #pragmacomment( lib, "gdiplus.lib"...

冯京宝 ⋅ 2010/10/31 ⋅ 0

模仿酷狗7(Kugou7)音乐魔方界面源码

源码名称:模仿酷狗7(Kugou7)界面源码 源码作者:邓学彬(泪闯天涯) 源码说明:内含VC++源码、易语言源码各一份.包含所有图片源码(使用Fireworks编辑) 开发环境:VC版--VS2005、Gdiplus;易语...

邓学彬 ⋅ 2012/12/09 ⋅ 0

VC 6.0 配置和使用gdi+

GDI+ GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,W...

junwong ⋅ 2012/03/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部