文档章节

再学 GDI+[58]: 路径 - 保存与读取路径数据

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 486
阅读 10
收藏 0
本例演示了把路径中的数据保存到一个文本文件, 然后再读出的过程.

本例效果图:



代码文件:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

const
  FilePath = 'c:\temp\path.txt';
var
  path: TGPGraphicsPath;
  p: TGPPen;

procedure TForm1.FormCreate(Sender: TObject);
var
  pts: array[0..6] of TGPPoint;
  rect: TGPRect;
begin
  pts[0].X := 10;  pts[0].Y := 50;
  pts[1].X := 40;  pts[1].Y := 90;
  pts[2].X := 80;  pts[2].Y := 10;
  pts[3].X := 110;  pts[3].Y := 50;
  pts[4].X := 140;  pts[4].Y := 10;
  pts[5].X := 180; pts[5].Y := 90;
  pts[6].X := 210; pts[6].Y := 50;

  path := TGPGraphicsPath.Create;
  path.AddBeziers(PGPPoint(@pts), Length(pts));

  path.GetBounds(rect);
  path.AddEllipse(rect);

  p := TGPPen.Create(aclBlue, 2);

  Button1.Caption := '保存路径数据';
  Button2.Caption := '读取路径数据';
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  path.Free;
  p.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  g.DrawPath(p, path);
  g.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  points: array of TGPPoint;
  types: array of Byte;
  List: TStringList;
  i: Integer;
begin
  SetLength(points, path.GetPointCount);
  SetLength(types, path.GetPointCount);
  path.GetPathPoints(PGPPoint(points), Length(points));
  path.GetPathTypes(PByte(types), Length(types));

  List := TStringList.Create;
  for i := 0 to Length(points) - 1 do
    List.Add(Format('%d,%d,%d', [points[i].X, points[i].Y, types[i]]));

  List.SaveToFile(FilePath);
  List.Free;

  Text := FilePath;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  points: array of TGPPoint;
  types: array of Byte;
  List1,List2: TStringList;
  i: Integer;
begin
  List1 := TStringList.Create;
  List2 := TStringList.Create;

  if not FileExists(FilePath) then Exit;
  List1.LoadFromFile(FilePath);

  SetLength(points, List1.Count);
  SetLength(types, List1.Count);

  for i := 0 to List1.Count - 1 do
  begin
    if List1[i] = '' then Break;
    List2.CommaText := List1[i];
    points[i].X := StrToIntDef(List2[0], 0);
    points[i].Y := StrToIntDef(List2[1], 0);
    types[i] := StrToIntDef(List2[2], 0);
  end;

  path.Reset;
  path.Free;
  path := TGPGraphicsPath.Create(PGPPoint(points), PByte(types), List1.Count);

  p.SetColor(aclRed);
  Repaint;

  List1.Free;
  List2.Free;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 147
  ClientWidth = 224
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 13
    Top = 114
    Width = 94
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 117
    Top = 114
    Width = 94
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/06/21/1227421.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
gdi+ 图片保存不成功

就像画图软件一样,加载进来一张图片,对图片进行修改编辑,然后把修改后的图片保存到原来的路径中,也就是以前的图片换成了修改后的图片,再打开这张图片就变成了修改后的了。因为这张图片正...

小李飞剪刀
2012/07/11
368
1
iOS沙盒以及基于文件的持久化

新建一个demo项目 在 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中调用如下代码 保存的结果是文件系统中会多出一个...

云飞扬v5
2016/09/21
3
0
Android 软件开发之数据的 新建 储存 读取 删除 详解(十四)

Android软件开发之数据的新建 储存 读取 删除 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6645629 1.使用SharedPre...

彭博
2012/03/09
124
0
Android 软件开发之数据的 新建 储存 读取 删除 详解(十四)

Android软件开发之数据的新建 储存 读取 删除 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6645629 1.使用SharedPre...

晨曦之光
2012/03/07
983
0
盼望着,盼望着,快来吧。。我的新书。。。。

昨天刚刚发工资,又正好收到邮件说是那本《 庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术 》已经到货了,赶紧上china-pub下订单购买了,同时还买了另一本《ASP.NET 3.5从入门到精通:基于...

niunan
2009/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

详解css BEM书写规范

BEM是基于组件的web开发方法。其思想是将用户界面分隔为独立的块,从而使开发复杂的UI界面变得更简单和快,且不需要粘贴复制便可复用现有代码。BEM由Block、Element、Modifier组成。选择器里...

前端小攻略
16分钟前
1
0
一个centos初始化脚本

概述 就是自己无聊写的一个脚本,欢迎使用,star,fork顺便关注我一波 https://github.com/bboysoulcn/centos 使用方法 这个是给最小化安装的centos使用的,在centos 7.5上测试过,当然其他的...

bboysoulcn
20分钟前
2
0
mybatis 自动维护 createdAt, updatedAt

SpringBoot Mybatis Plus公共字段自动填充功能

youngjdong
23分钟前
2
0
Docker之nginx容器中部署静态文件

注: Docker版本如下: Client: Version:17.12.0-ce API version:1.35 Go version:go1.9.2 Git commit:c97c6d6 Built:Wed Dec 27 20:11:19 2017 OS/Arch:linux/amd64Ser......

克虏伯
24分钟前
3
0
搭建git服务器————gitlab

github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下命令行的git服务器 找一台服务器,首先要...

chencheng-linux
31分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部