Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2008, 18:27   #1
DenLab
Новичок
Джуниор
 
Регистрация: 02.12.2008
Сообщений: 2
По умолчанию Как нарисовать линию по пикселям

Подскажите как нарисовать линию на Canvas по пикселям, а не сразу LineTo(X,Y). Нужно для визуализации процесса.

Последний раз редактировалось DenLab; 02.12.2008 в 19:26.
DenLab вне форума Ответить с цитированием
Старый 02.12.2008, 19:31   #2
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Код:
var
  i,y:integer;
begin
  Canvas.Brush.Color:=clBlack;
  for i:=0 to 100 do
  begin
    y:= round(10+(i-2)*12/5);
    Canvas.Rectangle(i,y,i+10,y+10);
  end;
end;

В основе лежит урание прямой (x-x1)/(x1-x2)=(y-y1)/(y1-y2)
y,x-переменные
x1,x2,y1,y2=const
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 02.12.2008, 19:35   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Вот, написал когда-то
Код:
procedure Ttest_form1.wayToPoint(sp, fp: tPoint);
var
c, dx, dy: integer;
step: real;
procedure temp(x, y: integer);
begin
   if canvas.Pixels[x, y] <> clBtnFace then canvas.Pixels[x, y] := clBlue;
end;
begin
   dx := fp.X - sp.X;
   dy := fp.Y - sp.Y;
   if dx >= dy then
   begin
      step := dy / dx;
      for c := sp.X to fp.X do
      temp(c, round(sp.Y+step*(c-sp.X)));
   end
   else
   begin
      step := dx / dy;
      for c := sp.Y to fp.Y do
      temp(round(sp.X+step*(c-sp.Y)), c)
   end;
end;
Altera вне форума Ответить с цитированием
Старый 02.12.2008, 20:14   #4
DenLab
Новичок
Джуниор
 
Регистрация: 02.12.2008
Сообщений: 2
По умолчанию

to SNUPY : Нужна ровная линия в 1 pixel. Rectangle не подойдёт.
to Altera : Можно прокоментировать листинг? Интересный вариант.
DenLab вне форума Ответить с цитированием
Старый 03.12.2008, 09:34   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

4 DenLab
Открой новый проект.Кинь на форму таймер.(Enabled = true; Interval = 50
Cоздай событие OnTimer. Модуль проекта должен выглядить вот так :
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject); 
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x: integer = 50;  // начало рисования линии

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObjec);
begin
  Form1.Canvas.Pixels[x,100]:= clRed;
  x:= x + 1;
end;

END.
Изменяя Interval , получишь разную скорость прорисовки.Запуск и останов рисования можно делать по OnClick или OnKey.
Как изменять толщину линии сам подумай.Всего лишь одну строку кода добавить нужно.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как же нарисовать линию на форме? (Вопрос новичка) grey Помощь студентам 11 24.11.2008 10:31
хочу стереть линию с канвы.КАК? harmager Общие вопросы Delphi 1 24.11.2008 10:28
Нарисовать на координатной площади линию a*x+b*y+c=0 НУБ!!! Общие вопросы Delphi 4 13.05.2008 22:48
Нарисовать линию под указанным градусом nikleb Паскаль, Turbo Pascal, PascalABC.NET 7 06.02.2008 15:22
Как в excel создать "винтовую линию"? W@LER Microsoft Office Excel 1 23.03.2007 20:04