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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2009, 19:43   #1
modulrev
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 21
По умолчанию Графика в паскале

вот исходник программы для вывода рисунка.Необходимо произвести заливку геометрических фигур,желательно разным цветом для наглядности.
Я пытаюсь залить,но заливается весь фон.Попытка заливки в исходнике закомментирована.Заранее благодарен.
Код:
uses graph;
procedure picture(x,y:integer;mk:real);
begin
x:=300;
y:=20;
circle(x,y,round(5*mk));
line(x,y+round(5*mk),x,y+round(15*mk));
rectangle(x-round(10*mk),y+round(15*mk),x+round(10*mk),y+round(20*mk));
line(x,y+round(20*mk),x,y+round(30*mk));
line(x,y+round(30*mk),x-round(15*mk),y+round(45*mk));
line(x,y+round(30*mk),x+round(15*mk),y+round(45*mk));
line(x-round(15*mk),y+round(45*mk),x,y+round(60*mk));
line(x+round(15*mk),y+round(45*mk),x,y+round(60*mk));
line(x-round(15*mk),y+round(45*mk),x-round(30*mk),y+round(45*mk));
line(x+round(15*mk),y+round(45*mk),x+round(30*mk),y+round(45*mk));
line(x-round(30*mk),y+round(45*mk),x-round(30*mk),y+round(65*mk));
line(x+round(30*mk),y+round(45*mk),x+round(30*mk),y+round(65*mk));
rectangle(x-round(45*mk),y+round(65*mk),x-round(15*mk),y+round(75*mk));
rectangle(x+round(45*mk),y+round(65*mk),x+round(15*mk),y+round(75*mk));
line(x-round(30*mk),y+round(75*mk),x-round(30*mk),y+round(90*mk));
line(x+round(30*mk),y+round(75*mk),x+round(30*mk),y+round(90*mk));
line(x-round(30*mk),y+round(90*mk),x,y+round(90*mk));
line(x+round(30*mk),y+round(90*mk),x,y+round(90*mk));
line(x,y+round(90*mk),x,y+round(105*mk));
line(x-round(15*mk),y+round(105*mk),x-round(20*mk),y+round(120*mk));
line(x+round(15*mk),y+round(105*mk),x+round(10*mk),y+round(120*mk));
line(x-round(15*mk),y+round(105*mk),x+round(15*mk),y+round(105*mk));
line(x-round(20*mk),y+round(120*mk),x+round(10*mk),y+round(120*mk));
line(x,y+round(120*mk),x,y+round(135*mk));
circle(x,y+round(140*mk),round(5*mk));
setcolor(9);
{floodfill(x,y+round(140*mk),10);}
outtextxy(180,230, 'N100,100');
end;
var gd,gm:integer;
begin
initgraph(gd,gm,' ');
picture(200,200,3);
readln;
closegraph;
end.
From Stilet:Код оформляй читабельно соответствующим тегом (#). Ато обидется можно.

Последний раз редактировалось Stilet; 05.03.2009 в 08:43.
modulrev вне форума Ответить с цитированием
Старый 04.03.2009, 22:34   #2
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

перед тем как начать заливать фигуру, нужно поставить перо внутрь фигуры. И ещё нужно, чтобы фигура была замкнута.

У Вас используется округление, поэтому вполне возможно, что есть где либо пиксель - который разрывает замкнутость фигуры, поэтому заливается всё.

PS в фигуру не вчитывался, просто предположил
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 09.03.2009, 16:30   #3
modulrev
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 21
По умолчанию Заливка картинкой.

С заливкой цветом понятно.Подскажите как заливать фигуру картинкой.Изображение картинки объявляется в массиве вроде.Но я не знаю как это правильно оформить.
modulrev вне форума Ответить с цитированием
Старый 09.03.2009, 18:59   #4
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от modulrev Посмотреть сообщение
С заливкой цветом понятно.Подскажите как заливать фигуру картинкой.Изображение картинки объявляется в массиве вроде.Но я не знаю как это правильно оформить.
С такой задачей не сталкивался, читайте литературу. В любом случае, можно самому написать процедуру, которая будет попиксельно заливать фигуру картинкой, предварительно проверяя, находиться этот пиксель внутри фигуры или нет.
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 09.03.2009, 20:23   #5
modulrev
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 21
По умолчанию Литература

А дайте пожалуйста ссылку на литературу,где подробно и доступно объясняется.
modulrev вне форума Ответить с цитированием
Старый 10.03.2009, 09:54   #6
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Изображение картинки можно только двухцветное сделать стандартными средствами.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 10.03.2009, 14:56   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Изображение картинки можно только двухцветное сделать стандартными средствами.
Это как понимать?
Насколько я знаю паскаль поддерживает 16 цветов или 256 со специальным драйвером.
Вадим Буренков вне форума Ответить с цитированием
Старый 10.03.2009, 16:22   #8
modulrev
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 21
По умолчанию Картинка

Картинка и не должна быть цветной.Подскажите кто знает.
modulrev вне форума Ответить с цитированием
Старый 11.03.2009, 10:51   #9
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от modulrev Посмотреть сообщение
Картинка и не должна быть цветной.Подскажите кто знает.
Можно изменить палитру Pascal, и тогда там будет вместо 16 цветов 16 оттенков серого, что позволит рисовать достаточно неплохие черно-белые изображения.
Код:
 procedure Set_Pal;
  begin
  SetRGBPalette(0,0,0,0);
  SetRGBPalette(1,4,4,4);
  SetRGBPalette(2,8,8,8);
  SetRGBPalette(3,12,12,12);
  SetRGBPalette(4,16,16,16);
  SetRGBPalette(5,20,20,20);
  SetRGBPalette(20,24,24,24);
  SetRGBPalette(7,28,28,28);
  SetRGBPalette(56,32,32,32);
  SetRGBPalette(57,36,36,36);
  SetRGBPalette(58,40,40,40);
  SetRGBPalette(59,44,44,44);
  SetRGBPalette(60,48,48,48);
  SetRGBPalette(61,52,52,52);
  SetRGBPalette(62,56,56,56);
  SetRGBPalette(63,60,60,60);
  end;
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 11.03.2009, 11:14   #10
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от OCTAGRAM Посмотреть сообщение
Изображение картинки можно только двухцветное сделать стандартными средствами.
Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
Это как понимать?
Насколько я знаю паскаль поддерживает 16 цветов или 256 со специальным драйвером.
Я имел в виду картинку для заливки. Своя картинка задаётся с помощью SetFillStyle и SetFillPattern. Цитирую хелп:

Цитата:
SetFillStyle (процедура) (модуль Graph)

Устанавливает цвет и стиль закраски.

Объявление:
Procedure SetFillStyle(Pattern : Word; Color : Word);

Режим:
Real, Protected

Замечания:
Устанавливает шаблон и цвет для всех операций закраски, производимых FillPoly, Bar, Bar3D и PieSlice. Доступно несколько предопределенных шаблонов закраски. Заданный по умолчанию шаблон = Solid и заданный по умолчанию цвет - цвет с максимальным номером в палитре.
Если в SetFillStyle переданы недопустимые параметры, то в переменной GraphResult возвращается значение grError, и текущие установки закраски не будут изменены.

Если Pattern равняется UserFill, то активным шаблоном закраски станет шаблон, определяемый пользователем (устанавливаемый с помощью процедуры SetFillPattern).
Цитата:
SetFillPattern (процедура) (модуль Graph)

Устанавливает определяемый пользователем шаблон закраски.

Объявление:
Procedure SetFillPattern(Pattern : FillPatternType; Color : Word);

Режим:
Real, Protected

Замечания:
Тип FillPatternType предопределен следующим образом:

Type FillPatternType = Array [1..8] Of Byte;
Что–то цветное здесь задать не получится. Более того, один из цветов ЕМНИП будет всегда чёрным.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в Паскале =)) barahlysh Помощь студентам 4 13.12.2009 19:31
Графика на паскале..... КиношкА Помощь студентам 8 10.01.2008 10:09
Графика в Паскале Win't Паскаль, Turbo Pascal, PascalABC.NET 2 16.12.2007 21:54