Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2006, 18:40
antol antol вне форума
Прохожий
 
Регистрация: 11.11.2006
Сообщения: 3
Репутация: 10
Счастье цвет пикселей, через которые проходит прямая.

На bitmap проводится линия, необходимо узнать цвет пикселей, через которые она проходит.
1)как организовать проверку вдоль линии(учитывая ее наклон)
2) Возникает проблема с занесением данных в массив. Не знаю, как занести данные о координатах, при таком коде получается несовместимость Tpoint и integer.
type PixelData=record
kx:Tpoint;
ky:Tpoint; //Координаты точки
Color:TColor //Цвет точки
end
var
Mass: array of PixelData;
procedure GetMass(x1,y1,x2,y2:integer); //Координаты двух точек через которые проходит прямая
var
t,x,y:integer;
d:real;
begin
d:= sqrt(sqr(x2-x1)+sqr(y2-y1));
SetLength(Mass,d);
for t:=x1 to x2 do begin (перебор по горизонтали, не учитывая наклон)
//Система параметрических уравнений, которой удовлетворяет каждая точка прямой
x:=x1+t*(x2-x1);
y:=y1+t*(y2-y1);
Mass[t-x1].kx:=x;
Mass[t-x1].ky:=y;
Mass[t-x1].color:=bitmap.canvas.pixel[x,y];
end;
end;
Ответить с цитированием
  #2  
Старый 02.12.2006, 20:41
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

//Должно работать

unit Unit1;

interface

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

type PixelData=record
Point:TPoint; //Координаты точки (целочислительные Point.x и Point.y )
Color:TColor; //Цвет точки
end;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure GetMass(x1,y1,x2,y2:real;Canvas:TCanvas);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Mass: array of PixelData; //Наш Массив
implementation

{$R *.dfm}


procedure TForm1.GetMass(x1,y1,x2,y2:real;Canvas:TCanvas);
var
k,m:real;
x,y:real;
i:integer;
begin
x:=x1;
SetLength(Mass,Abs(Round(x2-x1)));
for i:=1 to Abs(Round(x2-x1))-1 do begin
x:=x+1;
k:=(y1-y2)/(x1-x2);
m:=(x1*(y1-y2)+y1*(x2-x1))/(x1-x2);
y:=Round(k*x+m); //Уравнение прямой
//Заносим данные в массив
Mass[i].Point.X:=Round(x);
Mass[i].Point.y:=Round(y);
Mass[i].Color:=canvas.Pixels[Round(x),Round(y)];
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetMass(1,1,50,50,image1.Bitmap.Canvas);
end;
end.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter