|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
цвет пикселей, через которые проходит прямая.
На 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
|
|||
|
|||
//Должно работать
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. |