Форум программистов, компьютерный форум, киберфорум
Программирование графики
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 22.07.2017
Сообщений: 22
1

Графика: Возможно ли без сторонних библиотек вывести хоть какую-нибудь графику (кроме текстовой) на с/c++?

03.09.2017, 18:01. Показов 6446. Ответов 16
Метки нет (Все метки)

Мне бы хотелось узнать, ради интереса, возможно ли без сторонних библиотек вывести хоть какую-нибудь графику (кроме текстовой) на с/c++? С использованием ассемблерных вставок и стандартной библиотеки (да из всего, что входит в эти языки). Еще раз повторю, это ради интереса и эта задача не несет никаких практического использования.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2017, 18:01
Ответы с готовыми решениями:

Графика без сторонних библиотек
Интересует следующий вопрос: можно ли без сторонних библиотек, чистым С++ вывести пиксели разных...

Возможно ли чтение XML файла с C++ без использования сторонних библиотек?
Если нет, то какие библиотеки лучше?

Возможно отправить get запрос без сторонних библиотек используя лишь чистый Android Studio?
И возможно ли реализовать при помощи них регистрацию + авторизацию?

Вывести структуру html в TreeView, игнорируя комментарии, без использования сторонних библиотек
Помогите плиз, нужно вывести структуру HTML в TreeView игноря комментарии. Пользоваться сторонними...

16
1080 / 692 / 114
Регистрация: 12.10.2013
Сообщений: 4,587
05.09.2017, 08:43 2
graphics.h
0
25 / 28 / 4
Регистрация: 30.08.2017
Сообщений: 61
05.09.2017, 10:39 3
Цитата Сообщение от yoguy Посмотреть сообщение
возможно ли без сторонних библиотек
В стандарт С и С++ не входят инструменты для работы с графикой. Поэтому на "чистом" С, или С++ - нет.
0
2 / 2 / 0
Регистрация: 22.07.2017
Сообщений: 22
06.09.2017, 19:01  [ТС] 4
graphics.h не является стандартной библиотекой с\c++

Добавлено через 1 минуту
И ну тогда как же технологии дошли, что на с/с++ не возможно создание графики, как же тогда работают графические библиотеки этих языков?

Добавлено через 1 минуту
Ну тогда как с ассемблерными вставками-то как сделать это-то, как же, как?
0
25 / 28 / 4
Регистрация: 30.08.2017
Сообщений: 61
07.09.2017, 09:41 5
Цитата Сообщение от yoguy Посмотреть сообщение
И ну тогда как же технологии дошли, что на с/с++ не возможно создание графики
Шли, шли, и дошли. Путаешь невозможность и отсутствие поддержки со стороны языка и его стандартной библиотеки.
Цитата Сообщение от yoguy Посмотреть сообщение
ак же тогда работают графические библиотеки этих языков?
Через системные вызовы и работу с драйвером видеокарты. А в зависимости от библиотеки, еще через пару прослоек.
0
2 / 2 / 0
Регистрация: 22.07.2017
Сообщений: 22
08.09.2017, 14:06  [ТС] 6
Ок, тогда как реализовать так? Вот допустим у нас есть только комп с видеокартой, windows и компилятор c/c++, как это можно сделать, только подробней пожалуйста?
0
4192 / 2297 / 389
Регистрация: 05.10.2013
Сообщений: 6,395
Записей в блоге: 177
08.09.2017, 14:20 7
Цитата Сообщение от yoguy Посмотреть сообщение
Вот допустим у нас есть только комп с видеокартой, windows и компилятор c/c++,
Чтобы заставить видеокарту рисовать нужно загрузить в неё программу написанную:
0
Evg
Эксперт CАвтор FAQ
21164 / 8179 / 629
Регистрация: 30.03.2009
Сообщений: 22,480
Записей в блоге: 30
08.09.2017, 20:04 8
Цитата Сообщение от yoguy Посмотреть сообщение
И ну тогда как же технологии дошли, что на с/с++ не возможно создание графики, как же тогда работают графические библиотеки этих языков?
Языки построены таким образом, чтобы можно было работать с использованием сторонних библиотек. Т.е. все графические библиотеки являются просто пользовательскими библиотеками, НЕ входящими в стандарт языка
0
2 / 2 / 0
Регистрация: 22.07.2017
Сообщений: 22
09.09.2017, 08:55  [ТС] 9
8Observer8, опять вы со своими высокоуровневыми решениями сюда пришли? Если вы не смыслите в этом, пожалуйста, не отвечайте больше! Я хочу дойти до камня эволюции, с помощью которого изобрели молоток, потом с помощью молотка первые станки и.т.д. Вот что я хочу УЗНАТЬ!!
1
4192 / 2297 / 389
Регистрация: 05.10.2013
Сообщений: 6,395
Записей в блоге: 177
09.09.2017, 09:51 10
Цитата Сообщение от yoguy Посмотреть сообщение
на с/с++ не возможно создание графики, как же тогда работают графические библиотеки этих языков?
Да, на чистом C/C++, невозможно создание графики. В стандартной библиотеки C/C++ нет средств для рисования. Реализацию графических библиотек, типа OpenGL, создают производители видеокарт.
1
Evg
09.09.2017, 12:08
  #11

Не по теме:

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Чтобы заставить видеокарту рисовать нужно загрузить в неё программу написанную:
либо на языке GLSL (OpenGL Shading Language)
либо на языке HLSL (High Level Shader Language)
Чтобы заставить карту рисовать, нужно загрузить в неё программу, написанную в машинных кодах графического процессора, установленного на этой карты. И абсолютно без разницы, на каком языке она написана, хоть в hex-редакторе непосредственно в машинных кодах. К тому же это не "заставить рисовать", а запустить вычисления, которые сформируют значения цветов пикселей, абстрагированных от процесса вывода изображения на экран

Чтобы просто нарисовать, GPU вообще не нужен. Нужно на CPU записать цвета пикселей в память, отмапированную на фрэймбуффер видеокарты. Т.е. GPU и весь паровоз программного обеспечения для него вообще не принимает участия в процессе вывода изображения

0
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 687
01.02.2018, 18:24 12
Вот исходный код библиотеки SFML https://github.com/SFML/SFML/tree/master/src/SFML.
Разбирайтесь.
0
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 687
29.03.2018, 10:52 13
yoguy, вот вам ещё пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include<windows.h>
#include<string.h>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szProgName[]="Имя программы";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
 
w.lpszClassName=szProgName; //имя программы - объявлено выше
w.hInstance=hInstance; //идентификатор текущего приложения
w.lpfnWndProc=WndProc; //указатель на функцию окна
w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор
w.hIcon=0; 
w.lpszMenuName=0; 
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //цвет фона окна
w.style=CS_HREDRAW|CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
 
//Если не удалось зарегистрировать класс окна - выходим
if(!RegisterClass(&w))
return 0;
 
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd=CreateWindow(szProgName, //Имя программы
"Грфические возможности Win32 API", //Заголовок окна
WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
100, //положение окна на экране по х
100, //положение по у
500, //ширина
400, //высота
(HWND)NULL, //идентификатор родительского окна
(HMENU)NULL, //идентификатор меню
(HINSTANCE)hInstance, //идентификатор экземпляра программы
(HINSTANCE)NULL); //отсутствие дополнительных параметров
 
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
 
//Цикл обработки сообщений
 
while(GetMessage(&lpMsg, NULL, 0, 0)) {
TranslateMessage(&lpMsg); 
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam); 
}
 
//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, 
WPARAM wParam, LPARAM lParam)
{
HDC hdc; //создаём контекст устройства
PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
LOGFONT lf;
HFONT hFont;
RECT r;
HBRUSH hBrush;
HPEN hPen;
 
//Цикл обработки сообщений
switch(messg)
{
//сообщение рисования
case WM_PAINT :
hdc=BeginPaint(hWnd, &ps);
 
//Создаём свой шрифт
strcpy(lf.lfFaceName,"Times New Roman"); //копируем в строку название шрифта 
lf.lfHeight=20;
lf.lfItalic=1;
lf.lfStrikeOut=0;
lf.lfUnderline=0;
lf.lfWidth=10;
lf.lfWeight=40;
lf.lfCharSet=DEFAULT_CHARSET; //значение по умолчанию
lf.lfPitchAndFamily=DEFAULT_PITCH; //значения по умолчанию
lf.lfEscapement=0;
 
hFont = CreateFontIndirect(&lf);
SelectObject(hdc, hFont);
SetTextColor(hdc, RGB(0,0,255));
TextOut(hdc, 80,40, "Красота спасёт мир!!", 20);
 
//рисуем красный прямоугольник
r.top=100;
r.left=180;
r.right=400;
r.bottom=300;
FillRect(hdc, &r, HBRUSH(CreateSolidBrush(RGB(255,0,55))));
 
//рисуем зелёный эллипс
hBrush=CreateSolidBrush(RGB(10,200,100));
SelectObject(hdc, hBrush);
Ellipse(hdc, 20,100,200,200);
 
//рисуем закруглённый прямоугольник
hBrush=CreateSolidBrush(RGB(250,200,100));
SelectObject(hdc, hBrush);
hPen=CreatePen(2,2,RGB(0,0,255));
SelectObject(hdc, hPen);
RoundRect(hdc, 20, 250, 250, 350, 15, 15);
 
 
ValidateRect(hWnd, NULL);
EndPaint(hWnd, &ps);
break;
 
//сообщение выхода - разрушение окна
case WM_DESTROY:
PostQuitMessage(0); //Посылаем сообщение выхода с кодом 0 - нормальное завершение
DeleteObject(hPen);
DeleteObject(hBrush);
break;
 
default:
return(DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
}
return 0;
}
0
20 / 16 / 4
Регистрация: 25.06.2018
Сообщений: 128
17.07.2018, 00:47 14
Цитата Сообщение от yoguy Посмотреть сообщение
Я хочу дойти до камня эволюции, с помощью которого изобрели молоток, потом с помощью молотка первые станки и.т.д. Вот что я хочу УЗНАТЬ!!
Кажется я слишком стар, и уже точно не помню когда все это было. То ли при Брежневе, или при Горбачеве. Но когда-то мы действительно рисовали пикселями и выводили звук прямо с кода. Звук кодировался указанием частоты и длительности, а графика - координатами точек экрана с указанием цвета. Были команды для линий, окружностей и т.д. В сочетании с очисткой экрана получалась анимация.
Только все это было на Pascal-е. С++ тогда еще не было ...
0
Модератор
1262 / 693 / 130
Регистрация: 23.07.2018
Сообщений: 2,267
Записей в блоге: 3
05.09.2018, 08:51 15
При Брежневе С++ точно ещё не было.
При Горбачёве вышла книга Страуструпа. К тому времени С++ уже было несколько реализцаий С++.


Графику на X Server можно выводить, выдавая команды на cout, и читая ответы сервера через cin. Если перенаправать стандартный ввод-вывод команды на канал связи с сервером.

Добавлено через 1 час 9 минут
Вспомнил! Когда-то были графические видеотерминалы Tektronix. На них можно было выводить графику не только на С++ со стандартной библиотекой, но и просто командами типа echo и cat.
Эмулятор Tektronix встроен в современный xterm. Не нужно ничего перенаправлять, просто запустить программу в xterm и писать в std::cout управляющие последовательности с координатами отрезков, которые нужно нарисовать в окне терминала.

Добавлено через 5 минут
Ассемблерные вставки не дают программе на С++ каких-либо существенно новых возможностей. Кроме того не все компиляторы позволяют их использовать.
0
2 / 2 / 1
Регистрация: 04.11.2017
Сообщений: 57
12.10.2018, 15:38 16
В книге О.Калашникова об ассемблере было куча разных крутых штук для win32 (точно не уверен, станет ли это работать на
х64) среди которых было рисование всякой дичи на экране через ассемблер. Я понятия не имею на какой магии это работает, но если писать по адресу 0A000h , можно рисовать на экране, а если по адресу B800h то можно тоже рисовать тоже, но только кастрировано - символами (опять же не имею никакого понятия о том, как это может работать). у меня к сожалению работал только 2 вариант и то на виртуальной машине с 32х битной виндовс.
0
164 / 113 / 59
Регистрация: 12.07.2018
Сообщений: 277
14.10.2018, 21:09 17
Цитата Сообщение от Examnes Посмотреть сообщение
если писать по адресу 0A000h , можно рисовать на экране
Это сегмент первой видеостраницы в графическом режиме. Чтобы эта память стала отображаться на экране, надо либо соответствующим образом напрямую настроить порты видеокарты, либо выполнить нужные вызовы драйвера VESA. Под DOS-Box один из вариантов может сработать.
Цитата Сообщение от Examnes Посмотреть сообщение
по адресу B800h
По этому адресу при работе под DOS располагается текстовая видеопамять, каждые два байта её представляют собой символ, отображаемый на экране, и его атрибуты - цвет, мерцание и т.п. 160 байт этой видеопамяти представляют собой одну текстовую строку экрана.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2018, 21:09

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Элемент Picture Image или хоть что нибудь кроме DirectX
Народ объясните мне двоешнику как нормально общаться с элементами Image PictureBox или с другими...

Количество записей по Оси Y в DBChart, хоть какую-нибудь зацепку
Необходимо построить график количества поступившего товара по датам. В таблице указан вид товара и...

Создание икосаэдра без сторонних библиотек
Помогите создать икосаэдр в 3D на C# без использования библиотек. И нужно чтобы он крутился на...

Рисование 3D фигур без использования сторонних библиотек
в последнее время стало интересно как рисовать математически 3D фигуры в c# при этом не используя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.