Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 14.09.2009
Вот написал текст, он рабочий...А как вписать в него инверсию?
Ломаю голову, но никак не додумаюсь...

unit p_pline;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Image1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure Pixel(x,y:Integer; cl:Integer);
begin
form1.Image1.Canvas.Pixels[x,y]:=cl;
end;
procedure Pline(x1,y1,x2,y2:Integer; cl:Integer);
var
x,y:integer;
k,b:Real;
begin
if (x1<>x2) then
begin
if x1>x2 then
begin
x:=x1;
x1:=x2;
x2:=x;
x:=y1;
y1:=y2;
y2:=x;
end;

k:=(y2-y1)/(x2-x1);
b:=y1-k*x1;
for x:=x1 to x2 do
begin
y:=round(k*x+b);
Pixel(x,y,cl);
end;
end
else;
begin
for y:=y1 to y2 do
Pixel(x1,y,cl);

end;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin

pline(100,100,200,200,clRed);
pline(200,200,200,100,clRed);
pline(100,200,200,200,clRed);
pline(100,100,200,100,clRed);
pline(200,100,300,200,clRed);

end;

{procedure Pline(x1,y1,x2,y2:Integer; cl:Integer);
var
x,y:integer;
k,b:Real;

begin
k:=(y2-y1)/(x2-x1);
b:=y1-k*x1;
for x:=x1 to x2 do
begin
y:=round(k*x+b);
Pixel(x,y,cl);
end;
{procedure TForm1.Image1Click(Sender: TObject);
begin
pline(200,200,250,250,clRed);
end;
end;}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
end.



Партнер
 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
Надо пройтись по всем точкам, которые надо инвертировать, и инвертировать их :)
Код:
var
 i,k: Integer;
 cl: TColor;
 r,g,b: Byte;
...
cl:=Image1.Canvas.Pixels[i,k];
r:=(not (cl and $000000FF));
g:=(not ((cl and $0000FF00) shr 8));
b:=(not ((cl and $00FF0000) shr 16));
Image1.Canvas.Pixels[i,k]:=RGB(r,g,b);

Просто, работоспособно и неэффективно...


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan