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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 23:13   #1
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию Помогите создать программу раскраску(заливка замкнутых контуров)

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('C:\Apex\A.bmp');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=ColorDialog1.Color;
Image1.Canvas.Brush.Style:=bsSolid;
end;

end.

Вопрос:Как закрашивать контуры на изображении?

Последний раз редактировалось Stilet; 15.06.2009 в 10:03.
sinobithug вне форума Ответить с цитированием
Старый 15.06.2009, 00:39   #2
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Попробуй это:
Для закраски замкнутых областей у канвы есть метод FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle) закрашивает кистью Brush замкнутую область канвы, определенную цветом и начальной точкой закрашивания (x,y). Точка с координатами x,y является произвольной внутренней точкой заполняемой области, которая может иметь произвольную форму. Граница этой области определяется сочетанием параметров Color и FillStyle. Параметр Color указывает цвет, который используется при определении границы закрашиваемой области, а параметр FillStyle определяет, как именно по этому цвету определяется граница. Если FillStyle=fsSurface, то заполняется область, окрашенная цветом Color, а на других цветах метод останавливается. Если FillStyle=fsBorder, то наоборот, заполняется область окрашенная любыми цветами, не равными Color, а на цвете Color метод останавливается.
VadEr вне форума Ответить с цитированием
Старый 15.06.2009, 10:06   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вообще то есть метод Canvas.Polygon, который хорошо описан в хелпе. Его и используют для рисования закрашенных областей )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2009, 17:37   #4
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию

VadEr
FloodFill не подходит. Мне нужно закрашивать место куда я кликну мышью а не по кооординатам. Мне надо сделать заливку как в пэинте.
sinobithug вне форума Ответить с цитированием
Старый 15.06.2009, 18:14   #5
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Координаты мыши (x,y) можно получить спомощью события OnMouseDown (Генерируется, когда нажата кнопка мыши). Далее вставляете x и y в FloodFill.

Последний раз редактировалось VadEr; 15.06.2009 в 18:21.
VadEr вне форума Ответить с цитированием
Старый 15.06.2009, 19:54   #6
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию

Цитата:
Сообщение от VadEr Посмотреть сообщение
Координаты мыши (x,y) можно получить с помощью события OnMouseDown .
Подскажите пожалуйста как это делается
sinobithug вне форума Ответить с цитированием
Старый 15.06.2009, 20:38   #7
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Button2: TButton;
ColorDialog1: TColorDialog;
procedure Button1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('C:\Ape x\A.bmp');

end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
cur:TPoint;

begin
If colordialog1.Execute then
Image1.Canvas.Brush.Color:=colorDia log1.Color;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.FloodFill(cur.X,cur.Y ,clBlack,fsBorder);
end;

end.


Почему то ничего не закрашивает.

Последний раз редактировалось sinobithug; 15.06.2009 в 20:56.
sinobithug вне форума Ответить с цитированием
Старый 15.06.2009, 21:05   #8
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Image1.Canvas.FloodFill(cur.X,cur.Y,clBlack,fsBorder);


Код:
Image1.Canvas.FloodFill(X,Y ,clBlack,fsBorder);
VadEr вне форума Ответить с цитированием
Старый 15.06.2009, 21:22   #9
sinobithug
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 63
По умолчанию

Не известные идеитефикаторы x y
Их надо задать в var
какой тип данных им присвоить?







procedure TForm1.Button1Click(Sender: TObject);
var
X:TPoint;
Y:TPoint;

begin
Image1.Picture.LoadFromFile('C:\Ape x\A.bmp');
If colordialog1.Execute then
Image1.Canvas.Brush.Color:=colorDia log1.Color;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.FloodFill( X,Y,clBlack,fsBorder);
end;
Ошибка.
Incopatible types Integer and TPoint

Последний раз редактировалось sinobithug; 15.06.2009 в 21:29.
sinobithug вне форума Ответить с цитированием
Старый 15.06.2009, 21:26   #10
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Их не нада задавать, они уже объявлены (уберите var):
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If colordialog1.Execute then
Image1.Canvas.Brush.Color:=colorDia log1.Color;
Image1.Canvas.Brush.Style:=bsSolid;
Image1.Canvas.FloodFill(X,Y ,clBlack,fsBorder);
end;

end.
VadEr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кто может создать программу на строки в паскале? пожайлуста помогите. Tenzen Помощь студентам 5 05.03.2009 22:16
Помогите создать программу вычисления данных по графику Radamant Помощь студентам 1 07.12.2008 12:56
Помогите создать программу на С++ Rembo Помощь студентам 1 25.01.2008 20:46