Вопросы по графике

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Вопросы по графике

Сообщение Astador » 04.12.2010 00:13:49

Подскажите пожалуйста как подключить в графическом режиме высокое разрешение экрана. Хотя бы 1024х768 . И почему может не работать функция setbkcolor ? не меняет фон и все тут, в Турбо Паскале работала.
Astador
незнакомец
 
Сообщения: 2
Зарегистрирован: 04.12.2010 00:10:01

Re: Вопросы по графике

Сообщение Vadim » 04.12.2010 07:06:48

Astador
Astador писал(а):Подскажите пожалуйста как подключить в графическом режиме высокое разрешение экрана. Хотя бы 1024х768 .

Если речь идёт о досовской графике, то надо указать название соответствующего режима - m1024x768. Смотрите документацию.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вопросы по графике

Сообщение informat » 04.12.2010 08:22:29

Турбо паскалевская графика - игрушечная. И рассчитывать на полноценную работу не стоит.
Там есть ещё глюки. Попробуйте нарисовать сектор больше 180 градусов.
А вообще по-умолчанию графическое окно открывается на весь экран. Так что не стоит заморачиваться с графическими режимами.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Вопросы по графике

Сообщение Astador » 04.12.2010 11:45:36

Да, но с низкий разрешением картинка будет сильно растягиватся, а мне бы этого не хотелось.
Astador
незнакомец
 
Сообщения: 2
Зарегистрирован: 04.12.2010 00:10:01

Re: Вопросы по графике

Сообщение informat » 05.12.2010 09:18:18

Detect открывает на весь экран. Разве этого мало?
А точки (пикселы) меньше, чем поддерживает монитор, всё равно не станут.

Кроме того простое приписывание режима m1024x768 не работает.

Кто-нибудь знает, как в ДОСовской графике во FreePascal включить более 255 цветов.
Код ниже не включает.

Код: Выделить всё
Program Gg_Modes;

uses
  Graph;

  Var
    Gd, Gm : Integer;
    x : longint;

  Begin
   Gd:= Detect;
   Gm:= m1024x768x64K;
   InitGraph(Gd, Gm, '');
   If GraphResult <> grOk Then Halt(1);
   for X:=0 to GetMaxColor do
   begin
     SetColor(X);
     line(X, 0,  X, GetMaxY);
   end;
   ReadLn;
   CloseGraph;
  End.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Вопросы по графике

Сообщение Vadim » 05.12.2010 16:41:35

informat писал(а):Detect открывает на весь экран. Разве этого мало?
А точки (пикселы) меньше, чем поддерживает монитор, всё равно не станут.

Detect ориентируется на возможности видеокарты, а не на возможности монитора, так что его лучше не использовать, а задавать разрешение явно. У меня, например, монитор имеет расширение 1280, а Detect даёт 1600. Естественно никакого изображения (кроме Малевича :) ) не получаю. ;) А если задаю вручную - m1024x768, то получаю нормальное окошко с изображение.
На счёт цвета - та же фигня, задайте его вручную. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вопросы по графике

Сообщение informat » 06.12.2010 11:13:21

Vadim писал(а):
informat писал(а):Detect открывает на весь экран. Разве этого мало?
А точки (пикселы) меньше, чем поддерживает монитор, всё равно не станут.

Detect ориентируется на возможности видеокарты, а не на возможности монитора, так что его лучше не использовать, а задавать разрешение явно. У меня, например, монитор имеет расширение 1280, а Detect даёт 1600. Естественно никакого изображения (кроме Малевича :) ) не получаю. ;) А если задаю вручную - m1024x768, то получаю нормальное окошко с изображение.
На счёт цвета - та же фигня, задайте его вручную. ;)


Что-то там с документацией не стыковка.

У приведенном выше примере не получается подобрать константы, которые нужно присвоить переменным GD и GM, чтобы можно было использовать в графическом окне 16М цветов. Или хотя бы 64K.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Вопросы по графике

Сообщение Vadim » 06.12.2010 11:48:12

informat писал(а):У приведенном выше примере не получается подобрать константы, которые нужно присвоить переменным GD и GM, чтобы можно было использовать в графическом окне 16М цветов. Или хотя бы 64K.

Судя по документации, 16М цвет пока ещё не поддерживается. И, наверное, уже не будет. В связи с неактуальностью MS-DOS. :)
Поддерживается 64К цветов. Для этого надо указать:
Код: Выделить всё
gd:=D16bit;
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вопросы по графике

Сообщение informat » 07.12.2010 07:32:34

Vadim писал(а):
informat писал(а):У приведенном выше примере не получается подобрать константы, которые нужно присвоить переменным GD и GM, чтобы можно было использовать в графическом окне 16М цветов. Или хотя бы 64K.

Судя по документации, 16М цвет пока ещё не поддерживается. И, наверное, уже не будет. В связи с неактуальностью MS-DOS. :)
Поддерживается 64К цветов. Для этого надо указать:
Код: Выделить всё
gd:=D16bit;


А то я не пробовал.
Вот что получается:
Invalid graphics mode

Уточню, Windows XP:
■ Free Pascal IDE Version 1.0.12 [2010/11/10]
■ Compiler Version 2.4.2
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Вопросы по графике

Сообщение Vadim » 07.12.2010 10:26:14

informat
В модуле Graph есть одна особенность - он работает на режимах VESA. Поэтому, чтобы не путаться в трёх соснах, надо для начала выяснить, а какие режимы VESA поддерживает Ваш адаптер. В Graph'е есть для этого специальная функция. Вот Вам программка:
Код: Выделить всё
{Проверка поддерживаемых графических режимов}
Uses Graph;

Var
  Info: PModeInfo;

Begin
  Info:=QueryAdapterInfo;
  While Info^.Next<>NIL Do
  Begin
    WriteLn(Info^.ModeName, ' : ', Info^.MaxX, 'x', Info^.MaxY, ', ', Info^.MaxColor);
    Info:=Info^.Next;
  End;
End.

Запустите у себя, проверите и у Вас сразу наступит просветление. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вопросы по графике

Сообщение informat » 11.12.2010 07:05:59

Vadim писал(а):informat
В модуле Graph есть одна особенность - он работает на режимах VESA. Поэтому, чтобы не путаться в трёх соснах, надо для начала выяснить, а какие режимы VESA поддерживает Ваш адаптер. В Graph'е есть для этого специальная функция. Вот Вам программка:
...


Вот в этом-то и дело. И советовать ставить графические режимы смысла мало.
Graph и VESA - игрушки прошлого века. И не чего большего от них не получить.
Для начального обучения я использую. А для серьезных дел не стоит и пытаться.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name


Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru