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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графический режим, Есть вопросы 
:(
    Опции темы
Slay1
Дата 22.5.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Насколько я читал в разных мануалах VGAHI рассчитанн на 16 цветов.
Как задать режим, который способен отображать 256 цветов?
Пробовал IBM8514(написано что макимально 1024х768 и 256 цветов, что мне и нужно), но выскакивали только ерроры. Детектграф опредиляет видеодрайвер как VGA. Так как заставить отображать 256 цветов?
И еще вопрос по теме, допустим я перешел в режим с 256 цветами, но как эти цвета выводить на экран? Стандартные функции работают ведь только с форматом задания цвета типа BLACK или номер цвета. Как задавать и выводить на экран нужные мне цвета? Если можно пример пожалуйста. Как например сделать putpixel цвету 0,0,180?
Буду очень благодарный за ответы. 
PM MAIL   Вверх
regis
Дата 23.5.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата

Насколько я читал в разных мануалах VGAHI рассчитанн на 16 цветов.
Как задать режим, который способен отображать 256 цветов?
Пробовал IBM8514(написано что макимально 1024х768 и 256 цветов, что мне и нужно), но выскакивали только ерроры. Детектграф опредиляет видеодрайвер как VGA. Так как заставить отображать 256 цветов?


Все 256-цветовые режимы выше 320x200 - это уже не VGA, а SuperVGA!
Стандартные борландовские драйвера эти режимы не поддерживали. AFAIK, их вообще нельзя было поддерживать переносимым образом, пока стандарт VESA 1.0 не появился.
Вам нужны SVGA драйвера для BGI, поддерживающие VESA. Вроде был какой-то VESA.BGI (хотя не уверен, был ли это родной продукт или хакерская поделка). Поищите в Сети.

Цитата

И еще вопрос по теме, допустим я перешел в режим с 256 цветами, но как эти цвета выводить на экран? Стандартные функции работают ведь только с форматом задания цвета типа BLACK или номер цвета. Как задавать и выводить на экран нужные мне цвета? Если можно пример пожалуйста.


Элементарно: индекс цвета == индекс пиксела. (А реальный цвет зависит от палитры, которая устанавливается так же, как и в других VGA режимах.)

Цитата

Как например сделать putpixel цвету 0,0,180?
Буду очень благодарный за ответы.  


Или вам уже TrueColor нужен? Боюсь, с этим функции типа putpixel работать точно не будут.
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
Slay1
Дата 23.5.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



regis, 
Спасибоза ответ. Я думаю что мне наверное все таки достаточно будет 256 цветов.
Как цвет задавать я уже разобрался(ф-я setrgbpalette). Но есть еще вопросьі. 
Максимальное количество цветов в палитре только 16? 
И еще. Заюзал я  SVGA256.BGI(хочется попробовать разрешение 1280х1024), и столкнулса с такой проблемой.

Код

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
   /* select a driver and mode that supports the use */
   /* of the setrgbpalette function.                 */
   int gdriver = installuserdriver("SVGA256",NULL), gmode = 6, errorcode;
   struct palettetype pal;
   int i, ht, y, xmax;

   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode,"");

   /* read result of initialization */
   errorcode = graphresult();
   if (errorcode != grOk)  /* an error occurred */
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1); /* terminate with an error code */
   }

   /* grab a copy of the palette */
   getpalette(&pal);

   /* create gray scale */
   for (i=0; i<pal.size; i++)
      setrgbpalette(pal.colors[i], i*4, i*4, i*4);

   /* display the gray scale */
   ht = getmaxy() / 16;
   xmax = getmaxx();
   y = 0;
   for (i=0; i<pal.size; i++)
   {
      setfillstyle(SOLID_FILL, i);
      bar(0, y, xmax, y+ht);
      y += ht;
   }

   /* clean up */
   getch();
   closegraph();
   return 0;
}

Вьідает просто черньій єкран, а должньі бьіть прямоугольники с градациями серого. Об никаких ошьібках не информирует.
В то же время, если вместо
int gdriver = installuserdriver("SVGA256",NULL), gmode = 6, errorcode;
написать
int gdriver = VGA, gmode = 2, errorcode;
Все нормально работает, єкран заливается градиентами серого. Насколько я понял VGA и SVGA256 отличаются только тем, что второй поддержьівает режьімьі вплоть до 1280х1024. Так почему же программа не работает если использовать SVGA256.BGI???    

Это сообщение отредактировал(а) Slay1 - 23.5.2006, 21:51
PM MAIL   Вверх
regis
Дата 25.5.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



Цитата(Slay1 @ 23.5.2006,  21:38)
regis, 
Спасибоза ответ. Я думаю что мне наверное все таки достаточно будет 256 цветов.
Как цвет задавать я уже разобрался(ф-я setrgbpalette). Но есть еще вопросьі. 
Максимальное количество цветов в палитре только 16? 

Нет, в 256 цветовых режимах каждый цвет можно перепрограммировать. Другое дело -- не уверен, что это можно ф-циями BGI (которые в основном ориентированы на 16-цветовые режимы). Если не получится, можно попробовать функции BIOS (int 10h, ah=11h кажется... точно не помню).

Добавлено @ 12:49 
Цитата(Slay1 @ 23.5.2006,  21:38)
regis, 
И еще. Заюзал я  SVGA256.BGI(хочется попробовать разрешение 1280х1024), и столкнулса с такой проблемой.

(code skipped...)

Вьідает просто черньій єкран, а должньі бьіть прямоугольники с градациями серого. Об никаких ошьібках не информирует.
В то же время, если вместо
int gdriver = installuserdriver("SVGA256",NULL), gmode = 6, errorcode;
написать
int gdriver = VGA, gmode = 2, errorcode;
Все нормально работает, єкран заливается градиентами серого. Насколько я понял VGA и SVGA256 отличаются только тем, что второй поддержьівает режьімьі вплоть до 1280х1024. Так почему же программа не работает если использовать SVGA256.BGI???

Такое ощущение, что просто неправильно инициализируется видеорежим. Я сам давненько не программировал под DOS (да еще на Borland-овских компиляторах), так что могу ошибаться. Но смутно вспоминается, что сначала надо делать installuserdriver, потом -- инициализировать соотв. режим через initgraph. И естественно, тщательно проверять коды ошибок на каждом этапе. Также проверить путь к SVGA256.BGI. Вот все, что пока могу посоветовать.
  

Это сообщение отредактировал(а) regis - 25.5.2006, 12:50
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.