Как рисовать в консоли c
Перейти к содержимому

Как рисовать в консоли c

  • автор:

Можно ли нарисовать изображение в консоли с помощью C #? [Дубликат]

Я ищу способ рисовать изображение внутри окна консоли. Подобно тому, как я могу назвать Console.Write(«this will display in the console window»); . Я не уверен, возможно ли это или нет. Я немного поиграл без везения (вероятно, потому, что .NET хочет, чтобы вы использовали winforms для графического программирования). Вот фрагмент того, что я пытаюсь сделать:

using System; using System.Drawing; namespace DisplayImage < class Program < static void Main(string[] args) < using (var bmp = new Bitmap(100, 100)) using (var gr = Graphics.FromImage(bmp)) < gr.FillRectangle(Brushes.Orange, new Rectangle(0, 0, bmp.Width, bmp.Height)); Console.WriteLine("draw image"); gr.DrawImage(bmp, 1, 1); Console.WriteLine("drew image"); >> > > 

Есть ли способ сделать это?

Изменить

Есть ли способ манипулировать пикселями в консольном приложении? возможно, я мог бы вручную считывать пиксели из изображения и рисовать каждый отдельный пиксель в консоли. Это просто весело, кстати. Не практический проект, просто учебный проект. Позвольте взломать консоль: -)

quakkels 23 дек. 2013, в 17:33
Поделиться

Если вы можете сделать это с помощью Windows API, то вы можете сделать это в C # (в основном). Если вы не можете сделать это с помощью Windows API, то вы не можете сделать это в C # (в основном).

Как «рисовать» в командной строке windows?

вот на такой

В линуксе консольные приложения часто выводят свой прогресс подобием такого: [####___] 50% , при этом надпись «обновляется» на том же месте в терминале, а не спамит в cmd, как делает count <<"сообщение"<

Отслеживать
задан 29 ноя 2017 в 23:46
91 2 2 серебряных знака 7 7 бронзовых знаков

@Abyx ничего не изменилось. я могу что угодно так поставить в начало строкИ, но сами стрОки так и будут «спамить». а я хочу, чтобы новая строка вставала вместо старой, псевдо-gui такое.

30 ноя 2017 в 0:30
Так вроде уже есть ответы на этот вопрос: cursor position for stdout; SetConsoleCursorPosition
30 ноя 2017 в 2:14

‘\r’ переводит курсор на начало строки. Естественно, в строках не должно быть ‘\n’ — перевода строк. Поскольку символы предыдущего вывода не стираются, то следующий вывод должен быть не короче предыдущего, например, можно пробелов в конец налепить.

30 ноя 2017 в 9:03

Кстати, всякие бегущие строки выводят в ‘std::cerr,’, тогда 1) не будет проблем со сбросом буфера, о котором написали в ответе и 2) можно вывод (если он полезен) ‘std::cout’ перенаправить в файл, а бегущая строка по-прежнему будет на экране.

Рисование в консоли windows на С++

В консоли windows можно рисовать как и в обычном окне. Для этого используется библиотека libgdi. Я использую Qt Creator, и для подключения библиотеки libgdi пришлось прописать в .pro файл проекта путь к libgdi32.a

 LIBS += C:\Qt\Tools\mingw810_64\x86_64-w64-mingw32\lib\libgdi32.a 

Нарисуем минималистичный рисунок в консоли, пусть это будет белая линия от начала координат (0, 0) в точку (300, 300). По умолчанию, перо которым рисуется в консоли — черного цвета и на черном цвете консоли трудно различимо, поэтому у нас добавляется несколько строчек по созданию белого пера и привязки его к консольному окну. Также возникла ситуация что рисунок появлялся в консоли не при каждом запуске программы, было сделано предположение что рисует быстрее чем заканчиваются вывод консоли на экран и перерисовки консоли стирают рисунок. Предположение подтвердилось путем введения задержки после запуска функцией Sleep(100) и получением стабильной отрисовки.

 #include // GetConsoleWindow(), GetDC(). int main() < Sleep(100); // Задержка 100 мс, без этого, иногда, перерисовка окна затирает рисунок HWND hwnd = GetConsoleWindow(); // Находим дескриптор (handle) консольного окна HDC hdc = GetDC(hwnd); // Находим контекст устройства DC - device context HPEN hPen = CreatePen(PS_SOLID, 5, RGB(255, 255, 255)); // Создаем (сплошное перо, толщиной 5 пикселов, белого цвета) SelectObject(hdc, hPen);// Привязываем перо к экрану LineTo(hdc, 300, 300); // Рисуем линию от текущих координат (0, 0) к (300, 300) >

Рисование линии в консоли С++

Результат работы программы.

Усложним задачу и нарисуем толстыми, цветными, градиентными линиями синус.

 #include // GetConsoleWindow(), GetDC(). #include // std::cout #include // sin() #include // system() int main() < system("chcp 65001"); // Active code page: 65001 (Устанавливает UTF-8) system("cls"); // Очищает окно от предыдущего вывода HWND hwnd = GetConsoleWindow(); // Находим дескриптор (handle) консольного окна HDC hdc = GetDC(hwnd); // Находим контекст устройства DC - device context int x = 0; // Координата x for (float i = 0; i < 3.14 * 30; i += 0.05)< // Итерации рисования int R = fabs(sin(i * 1.3 - 0.3)) * 255; // Циклически меняем значение цвета int G = fabs(sin(i * 1.1 - 0.5)) * 255; // Циклически меняем значение цвета int B = fabs(sin(i * 1.7 - 0.7)) * 255; // Циклически меняем значение цвета COLORREF color = RGB(R, G, B); // Цвет (R, G, B) 0. 255 Меняем цвет в процессе HPEN hPen = CreatePen(PS_SOLID, 5, color); // Создаем перо SelectObject(hdc, hPen); // Привязываем перо к экрану int y = 350 - 340 * sin(i); // Координата y LineTo(hdc, x, y); // Рисуем линию x += 1; // Увеличиваем x для рисования следующей точки DeleteObject(hPen); // Освобождаем ресурсы >ReleaseDC(hwnd, hdc); // Освобождаем ресурсы std::cout 

Рисование градиентного синуса в консоли С++

Результат работы программы.

Понравилась страница?
Добавить в закладки
Или поделиться!

Примеры графики на C++

Как рисовать графические объекты в C++ в консоли, допустим, круг, квадрат и другие. Я работаю в DEV C++.

Отслеживать
51.4k 87 87 золотых знаков 267 267 серебряных знаков 508 508 бронзовых знаков
задан 10 июн 2011 в 13:22
413 4 4 золотых знака 14 14 серебряных знаков 33 33 бронзовых знака
Моя вопрос не понимай. Что значит «примеры графических объектов»?
10 июн 2011 в 15:01
Короче, как сделать квадрат и круг на C++
10 июн 2011 в 15:04
Где сделать? В bmp-файле, в окошке, в консоли, на ЧПУ с 250 Вт лазером? Буквами али точками.
10 июн 2011 в 15:07
10 июн 2011 в 15:10
ncurses -> google
10 июн 2011 в 15:11

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Хм. Консоль. Т.к. рисовать настоящую графику в консоли не представляется возможным, то рисование надо делать символами.

Все символы в консоли одинаковой ширины. Значит, можно их рассматривать как точки.

Как вывести, например, квадрат 7х7? Самый простой и дубовый способ:

for(int i=0; i 

Если надо его сдвинуть - просто выведем перед ним пустые строки и символы пробела сколько нам надо. И квадрат будет не в углу торчать.

Естественно, для всех стандартных геометрических объектов существуют алгоритмы растеризации (превращения в набор точек). Например, для линии хорошо известен алгоритм Брезенхема. Для круга тоже оный имеется. Или ещё какие.

Почитайте книги по программированию, где в названии есть термины "Компьютерная графика", "Машинная графика", "Алгоритмы машинной графики" и что-то в этом духе. Там всё очень популярно должно объясняться, как именно рисовать объекты, с картинками и алгоритмами.

Вот. Это если подходить "с нуля".

А так, конечно, есть готовые библиотеки для подобных рисований.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *