文档章节

再学 GDI+[11]: DrawCurve - 绘制曲线

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 524
阅读 18
收藏 0
本例效果图:



代码文件:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    TrackBar1: TTrackBar;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure LabeledEdit1Change(Sender: TObject);
    procedure LabeledEdit2Change(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

var
  PtArr: array of TGPPoint;
  i: Integer = 0;
  tension: Single;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Caption := '擦除';
  LabeledEdit1.EditLabel.Caption := '起始点';
  LabeledEdit2.EditLabel.Caption := '有效点数';
  LabeledEdit1.Text := '0';
  LabeledEdit2.Text := '0';
  TrackBar1.ShowSelRange := False;
  TrackBar1.Min := -25;
  TrackBar1.Max := 35;
  TrackBar1.Position := 5;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Inc(i);
  SetLength(PtArr, i);
  PtArr[i-1].X := X;
  PtArr[i-1].Y := Y;
  LabeledEdit2.Text := IntToStr(i-1);
  Text := IntToStr(i);
  Repaint;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
  i,n1,n2: Integer;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclRed, 2);
  g.Clear(aclWhite);

  n1 := StrToIntDef(LabeledEdit1.Text, 0);
  n2 := StrToIntDef(LabeledEdit2.Text, Length(PtArr)-1);

  {后面三个参数是可选的, 最后参数的默认值是 0.5, 为 0 时曲线会转为直线段}
  g.DrawCurve(p, PGPPoint(PtArr), Length(PtArr), n1, n2, tension);

  p.SetWidth(1);
  p.SetColor(aclBlack);
  for i := 0 to Length(PtArr) - 1 do
    g.DrawEllipse(p, PtArr[i].X-2, PtArr[i].Y-2, 4, 4);

  g.Free;
  p.Free;
end;

procedure TForm1.LabeledEdit1Change(Sender: TObject);
var
  a,b: Integer;
begin
  a := StrToIntDef(LabeledEdit1.Text, 0);
  if (a < 0) or (a > Length(PtArr) - 2) then
    LabeledEdit1.Text := IntToStr(0);

  a := StrToIntDef(LabeledEdit1.Text, 0);
  b := StrToIntDef(LabeledEdit2.Text, 0);
  if a+b > Length(PtArr)-1 then
    LabeledEdit2.Text := IntToStr(Length(PtArr)-1-a);
  Repaint;
end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
var
  a,b: Integer;
begin
  a := StrToIntDef(LabeledEdit1.Text, 0);
  b := StrToIntDef(LabeledEdit2.Text, 0);
  if (b < 0) or (b >= Length(PtArr) - a) then
    LabeledEdit2.Text := IntToStr(Length(PtArr)-1-a);
  Repaint;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  tension := TrackBar1.Position / 10;
  Repaint;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  i := 0;
  SetLength(PtArr, i);
  Repaint;
  Text := IntToStr(i);
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 187
  ClientWidth = 264
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnMouseUp = FormMouseUp
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 181
    Top = 155
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object TrackBar1: TTrackBar
    Left = 8
    Top = 155
    Width = 167
    Height = 25
    TabOrder = 1
    OnChange = TrackBar1Change
  end
  object LabeledEdit1: TLabeledEdit
    Left = 208
    Top = 54
    Width = 48
    Height = 21
    EditLabel.Width = 61
    EditLabel.Height = 13
    EditLabel.Caption = 'LabeledEdit1'
    TabOrder = 2
    OnChange = LabeledEdit1Change
  end
  object LabeledEdit2: TLabeledEdit
    Left = 208
    Top = 102
    Width = 48
    Height = 21
    EditLabel.Width = 61
    EditLabel.Height = 13
    EditLabel.Caption = 'LabeledEdit2'
    TabOrder = 3
    OnChange = LabeledEdit2Change
  end
end

 
 
 
 
 

 

 

  

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Quartz2D IOS绘图 线 椭圆 矩形 贝塞尔曲线 弧

// // ViewController.m // Quartz2D // // Created by dc008 on 15/12/7. // Copyright © 2015年 CXY. All rights reserved. // #import "ViewController.h" #import "CuiXiaoYu.h" @inter......

温暖c
2015/12/07
37
0
用C#的GDI+技术生成复杂型彩色验证码

该类是生成一个验证码的类。本人集合了网上大部分的C#关于GDI+的文章进行多次改进,现在已经形成了可在生产环节中使用的验证码。 该验证码加入了背景噪点,背景噪点曲线和直线,背景噪点文字...

Minho
2012/12/13
0
2
CGContextRef UI界面美化

#import "Birongchao.h" @implementation Birongchao - (void)drawRect:(CGRect)rect { NSLog(@"drawRect 被调用了!"); [self drawLine]; CGContextRef context = UIGraphicsGetCurrentCon......

TimeConcept
2015/12/07
41
0
C# chart控件绘制曲线

在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图、柱状图什么的了。 参考文章 1. 使用....

橘子红了呐
2017/11/07
0
0
实战开发:新手小白如何用C++制作经典网游DNF

十年前,那时候的网吧还不叫网咖,那时候没有王者荣耀也没有英雄联盟,那时候梦幻西游刚推出珍宝阁系统,那时候巫妖王的灵魂还封闭在冰封王座。 寻仙、穿越火线、征途、天龙八部……同时在线...

stone15165
05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES6 Promise

Promise promise是异步编程的一种解决方案 1 什么是异步? 异步模式,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则...

NDweb
14分钟前
0
0
Python百分登顶年度编程语言排行榜

今天 IEEE Spectrum 发布了 2018 年度顶级编程语言排行榜。该榜单可根据流行趋势、职业方向、语言类型等多个标准各自细分生成榜单,也可以综合多个标准进行排列,使用者可以根据自己的需求过...

六库科技
18分钟前
0
0
consul笔记

安装和启动就不说了,很简单。 注册一个服务: http://localhost:8500/v1/agent/service/register put请求,json格式内容如下 { "ID": "userServiceId", //服务id "Name": "userService", //服...

朝如青丝暮成雪
18分钟前
0
0
iOS CollectionView 的那些事

UICollectionView是开发中用的比较多的一个控件,本文记录UICollectionView在开发中常用的方法总结,包括使用UICollectionViewFlowLayout实现Grid布局、添加Header/Footer、自定义layout布局...

aron1992
19分钟前
0
0
linux tar.gz zip 解压缩 压缩命令

http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0.9.6.zip download SDK link http://dl.google.com/Android/android-sdk_r11-linux_......

owensliu
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部