Словесное описание программы. Рисование пикселя стандартными средствами Delphi. Создание области для текстуры в оперативной памяти

Страницы работы

Содержание работы

Словесное описание программы.

В работе на форму выводятся фигуры путём рисования пикселя стандартными средствами Delphi – это Pixels[x, y].

Фигуры – это сама точка, отрезок, контур треугольника и треугольник закрашенный (с заливкой).

Отрезок. Рассматриваются два варианта: 1) когда крайние точки лежат друг над другом, т.е. вертикальный отрезок. Тогда от самой верхней точки переходим к нижней и так далее, до самой нижней двигаемся. 2) когда крайние точки не лежат друг над другом. В этом случае делаем точкой №1 ту, что лежит левее, если требуется. Далее переходим от точки №1 до №2, увеличивая каждый раз координату “x” на 1, а “y” каждый раз вычисляем по формуле . И так доходим до точки №2.

Контур треугольника. Эта процедура вызывает три процедуры-отрезка. То есть, имея три вершины, строим три отрезка между этими вершинами.

Треугольник закрашенный. Сначала сортируем вершены так, чтобы вершина №1 была самой левой, а вершина №3 была самой правой, соответственно, вершина №2 будет лежать между остальными. Далее рассматриваем случаи: а) вершина№1 и вершина №2 лежат друг над другом, тогда двигаясь от вершины №3, изменяя координату “x” на “-1”, рисуем вертикальные линии до, к примеру, вершины№1. Линии рисуем от ребра между вершинами 3-1 и вершинами 3-2, вычисляя координаты “y” к соответствующей координате “x” как   и

б) вершина№2 и вершина №3 лежат друг над другом делаем аналогично.

в) последний случай – обычный треугольник. Тут мы рисуем вертикальные линии от вершины№1 до вершины №2 опять же между рёбрами вершин 1-2 и 1-3, но только до вертикальной линии, опущенной из вершины№2 к ребру 1-3. Далее рисуем вертикальные линии от вершины№3 до вершины №2 между рёбрами вершин 3-2 и 3-1, но только до вертикальной линии, опущенной из вершины№2 к ребру 1-3.

Текст программы.

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls;

type

  TForm1 = class(TForm)

    Image: TImage;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Edit4: TEdit;

    Edit5: TEdit;

    Edit6: TEdit;

    Button4: TButton;

    Button5: TButton;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Button6: TButton;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

  private

    { Private declarations }

    BMemory: TBitmap;

    tex: Boolean;

    procedure Pixel(x,y: integer; Colr,colg,colb: byte); //рисование пикселя

    Procedure Swap(var  a,  b: integer);                 //процедура обмена переменных местами

procedure Clear();                                   //очистка формы

procedure garizont ( y,  x1,  x2: integer);          //рисование горизонтальной линии

procedure Linia(x0, y0, x1, y1: integer);            //рисование линии

    procedure Treugolneg( x1,  y1,  x2,  y2,  x3, y3: integer);//рисование треугольника

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

  begin

tex:=false;

BMemory := TBitmap.Create;       // создание области для текстуры в оперативной памяти

BMemory.PixelFormat := pf24bit;  //настройка формата пикселя (24 бит цвет)

BMemory.Width := 640;

    BMemory.Height := 480;

    BMemory.LoadFromFile('tex.bmp');

    clear;

  end;

procedure TForm1.FormDestroy(Sender: TObject);

  begin

BMemory.Free;    //очистка выделеной ранее области памяти

end;

//очистка формы ===========================================================

procedure TForm1.Clear();

  begin

   Image.Canvas.Brush.Color :=clWhite;

      Image.Canvas.Rectangle(0,0,640,480);

  end;

//рисование пикселя =======================================================

procedure TForm1.Pixel(x,y: integer; Colr,colg,colb: byte);

  begin

 if tex then

    Image.Canvas.Pixels[x,y]:=BMemory.Canvas.Pixels[x,y]

   else

    Image.Canvas.Pixels[x,y]:=rgb(Colr,colg,colb);

  end;

//процедура обмена переменных местами =====================================

procedure TForm1.Swap(var  a,  b: integer);

Похожие материалы

Информация о работе