zoukankan      html  css  js  c++  java
  • GdiPlus[42]: IGPGraphics (一)


    //方法
    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;
    
  • 相关阅读:
    数据库子句
    数据查询的语言
    试图
    Bootstrap 简介及引用方法
    一阶段项目整理
    js 鼠标移入移出
    js 鼠标点击事件
    轮播图
    滚动条 固定导航栏
    三元运算符 DOM找元素
  • 原文地址:https://www.cnblogs.com/del/p/1629248.html
Copyright © 2011-2022 走看看