Помогите с консольной графикой

AndrewAAndrew

Нужно нарисовать нечто вроде окрашеных зон. Прога консольная, менять её сложно и опасно. Подскажите где можно найти описание консольной графики для тупых в С/С++. Хотелось бы чтобы изображение сохранялось в каком-нибудь, пусть самом дерьмовом формате, в файл.
Ну типа операций draw (x,y, colour). Что нибудь простое и для тупых.
Нескольок сумубрно, но только от того, что тра***л шеф, а до защиты всего 20 дней. Спасите

maggi14

Консольная - в смысле, графика или псевдографика?
В любом случае, <conio.h>

AndrewAAndrew

Да что угодно, лишь бы были картинки, где разные области окрашены в разный цвет.

maggi14

йа, вроде, ужэ сказал: открываиш файл <conio.h> и четаиш. Паролельно поглядывая в MSDN.
Если тебе не очень срочно, могу привезти книжку по графике в Си. Но это не раньше понедельника.

AndrewAAndrew

Срочно. Но книжку привези, пожалуйста.
А как она называлась, может в инете есть.

rosali

Да нет, он bmp хочет сгенерировать, не нужна ему графика в С.

Elina74


#include<conio.h>
#include<stdio.h>
void main{
textbackground(BLACK);
textcolor(LIGHTBLUE);
cprintf("LIGHT Blue █\n\r");
getch;
}
На BC++ 3.1 работало.
по ходу, автору этого не надо было

maggi14

Так и называлась: Построение графических приложений в языке Си - или что-то подобное. Советская книга поздних сишных времен, где-то конца 80х.

maggi14

То есть? БМП тоже можно генерить, юзая эту книгу.

AndrewAAndrew

Ну там слова особо не нужны. Просто раскрасить квадрат. Т.е. экран поделен на сетку 800x800. Каждую клетку в зависимости от опр. числа нужно покрасить в опр. цвет. Будут в итоге нечто вроде концентрических кругов разного цвета. И желательно, чтобы этот результат сохранился где-нибудь в виду bmp-шника или чего-нибудь другого. Вот и все.

Julie16

Могу рассказать как записать в tga файл.

rosali

На можешь поизучать, что я в детстве ваял Тебе нужно читать в основном Graph/Bitmap.cpp/MBitmap::Write, но может и еще чего пригодится.

AndrewAAndrew

Раскажи. А что это за формат.

Elina74

Тебе известен какой там использовался компилятор?
Для BC++ 3.1 используетcя некий графический драйвер egavga.bgi
подключается библиотека <graphics.h>
используются функции
line(x1,y1,x2,y2)
lineto(x1,y1)
moveto(x1,y1)
putpixel(x1,y1,x2,y2)
initgraph
closegraph
Но режима 800х800 там не было и в помине.

AndrewAAndrew

Ну вот у меня установлен С++Builder 6

maggi14

Это да. Типичные режимы: 320х200, 640х200, 640х480..

maggi14

Не обязательно egavga.bgi. Какой режим закажешь в ИнитГраф, такой драйвер и будет. Я, например, с cga.bgi сталкивался.
В принципе, можно написать свой. Это не очень сложно, у меня даже есть такая самописная библиотека. Юзала ассемблер.

Julie16

Подожди. Я не понял, что тебе надо: вывод на экран или вывод в файл?

Julie16

PS: пока вспоминал как сохранятся tga, сгенерил клевую картинку

AndrewAAndrew

В файл.

AndrewAAndrew

Блин, мне вот такую же надо. И все. ВСЁ. Только цвета будут для каждой точки разные.

Julie16

Тогда на вот тебе:

AndrewAAndrew

Спасибо.

AndrewAAndrew

Осталось понять как она работает.

Julie16

Ну как, добавляешь файлы Bitmap.C && Bitmap.h к своему проекту, а пример работы - в main.C Что там не ясно? Создаешь объект. Пераметры конструктора - ширина и высота. Для того чтобы установить точку можно например воспользоваться .setPixel( x, y, red, gree, blue ) x,y - координаты, r, g, b - цветовые компонеты. они типа float, от 0 до 1.

AndrewAAndrew

А если мне допустим надо восемь цветов.

Julie16

И в чем проблемы?

maggi14

Ну, дискретизируй, это же несложно.

AndrewAAndrew

Наверное я все же тупой.
Ты можешь, если не трудно написать четыре строчки:
1) Создание файла рисунка
2) Установление границ рисунка (800x800)
3) Нарисовать пиксел в точке (x,y) допустим красного цвета
4) Закрыть файл
Вот и все.
P.S. Можно ли направить вывод этих пикселей в файл типа
ofstream outfile ("picture.tga")
outfile<< something;

Julie16

Bitmap b( 800,800 );
b.setPixel( x, y, 1, 0, 0 );
b.writeToFile( "res.tga" );

AndrewAAndrew

Ну это нужно подключать эти два файла. А вот сами исходные команды. Чтобы короче.

Julie16

Короче не получится.

AndrewAAndrew

Просто Builder ругается и выдает до хера ошибок.

Julie16

1) Переименуй Bitmap.C в Bitmap.cpp и заново добавь его. Может builder думает что это сишный исходник...
2) Ошибки где?

AndrewAAndrew

Вроде как разобрался. А вот если мне другие увета надо, то как их вставить. Например. Оранжевый. Поиграть с коэффициентом и вместо 1 посылать другие?

ppplva

почитай в гугле про rgb

Julie16

Ну е-мое. Ты же можешь варьировать все цветовые составляющие. Какие проблемы-то? r = 1, g = 0.5, b = 0.

AndrewAAndrew

Все понял спасибо.

AndrewAAndrew

Правда временами эта прога вызвает переполнение стека.

Julie16

Это не вина моего класса. Ты точно уверен что не пытаешься писать за пределы границ?

AndrewAAndrew

Да нет, вроде. Плохо, что Этот массив много памяти требует. А без него никак нельзя?

Julie16

Наверное никак, если только сразу в файл не писать. Ну или можно не использовать флоаты, хотя мне так удобнее. В общем я отвечаю за этот класс. Если у тебя нет переходов за границы, то и в этом классе не будет глюков. Ищи ошибку у себя.

AndrewAAndrew

А как писать сразу в файл. Фактически я это у тебя и спросил несколькими постами выше. Т.е. мне эти классы ни к чему, просто просто три функции
1. Нарисовать точку (сразу в файл)
2. Открыть, закрыть файл.
И все.

Julie16

Меня сейчас ломает. Все завтра. Ты пока отладь алгоритм, чтобы он хоть так работал...

SvinkaVJeansah

Тебе известен какой там использовался компилятор?
Для BC++ 3.1 используетcя некий графический драйвер egavga.bgi
подключается библиотека <graphics.h>
используются функции
line(x1,y1,x2,y2)
lineto(x1,y1)
moveto(x1,y1)
putpixel(x1,y1,x2,y2)
initgraph
closegraph
Но режима 800х800 там не было и в помине.
другие режимы через другие .bgi файлы.

AndrewAAndrew

Дело в том, что во всей проге используются потоковые вводы и ввыводы, в том числе и в файл. И это конфликтует со ст. вводом-выводом.
Оставить комментарий
Имя или ник:
Комментарий: