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

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

  • автор:

Графика в Си.

В графическом режиме в Си можно отображать на экране различные фигуры, строить изображения, реализовывать анимацию и компьютерные игры.

Чтобы работать в графическом режиме в Си, необходимо перейти в графический режим, инициализировав графическое окно си initwindow ( ширина окна, высота окна ); в котором и будут рисоваться изображения. После завершения работы с графикой, необходимо выйти из графического режима с помощью команды closegraph();

Структура программы с графикой в Си.

#include // подключение заголовочного файла с графическими функциями
#include
main()
initwindow ( 500, 500 ); // инициализировали и открыли окно размером 500 на 500
…рисуем графические объекты
getch(); // ждем нажатия клавиши
closegraph(); // закрываем графический режим
>

Основные графические объекты в си, такие как точка, линия, окружность, прямоугольник задаются с помощью системы координат. Система координат в графическом режиме Си задается следующим образом. Верхний левый угол экрана имеет координату x=0 и y=0.

Координата X задается слева направо. Т.е. чем больше X, тем правее точка.

Координата Y задается сверху вниз. Т.е. чем больше Y, тем ниже точка.

Максимальные X это ширина окна. Максимальное Y это высота окна.

графический режим в си с

Задание цвета изображения в Си

Чтобы задать цвет изображаемого объекта, используется оператор setcolor(номер цвета);

Таблица цветов в Си.

0 черный
1 синий
2 зеленый
3 морской волны
4 красный
5 фиолетовый
6 коричневый
7 светло-серый
8 темно-серый
9 светло-синий
10 светло-зеленый
11 светлый морской волны
12 светло-красный
13 светло-фиолетовый
13 светло-фиолетовый
14 желтый
15 белый

setcolor(4) ;// устанавливаем красный цвет

Отображение точки в Си.

Для рисования точки в графических программах си используется оператор

putpixel (x, y, номер цвета );

x, y – координаты точки

номер цвета – цвет, которым будет отображена точка

Отображение линии в Си

Для рисования отрезка в графических программах си используется оператор

x1, y1 – координаты одного конца отрезка

x2, y2 – координаты другого конца отрезка

Отображение окружности в Си

Для рисования окружности в графических программах си используется оператор

x, y – координаты центра окружности

r- радиус окружности

Пример. Отображение окружности белого цвета с центром 100, 100 и радиусом 20.

setcolor(15);// устанавливаем цвет рисования 15 — белый

circle(100,100, 20);// рисуем окружность с центром 100, 100 и радиусом 20

Отображение прямоугольника в Си.

Для рисования прямоугольной рамки в графических программах си используется оператор.

rectangle (x1, y1, x2, y2);

x1, y1 – координаты верхнего левого угла прямоугольника

x2, y2 – координаты нижнего правого угла прямоугольника

Чтобы задать цвет рамки необходимо предварительно установить цвет рисования с помощью оператора setcolor(номер цвета);

Для отображения закрашенного прямоугольника в Си используются два оператора.

setfillstyle ( 1, номер цвета );

bar (x1, y1, x2, y2);

x1, y1 – координаты верхнего левого угла прямоугольника

x2, y2 – координаты нижнего правого угла прямоугольника

Закрашивание ограниченной области в Си.

Чтобы закрасить определенным цветом целую ограниченную область в графической программе си используются два оператора.

setfillstyle (1, цвет закраски );

floodfill (x, y, цвет границы области);

x, y – координаты внутри области

цвет закраски – цвет , которым будет закрашиваться область

цвет границы области – цвет границы закрашиваемой области

Пример закрашенного кругав графических программах си

setcolor(15);// устанавливаем цвет рисования 15 — белый

circle(100,100, 20);// рисуем окружность с центром 100, 100 и радиусом 20

setfillstyle ( 1, 15 ); // устанавливаем цвет заполнения круга белый -15

floodfill (100, 100, 15); // заполняем окружность, указывая точку внутри ее – центр

Пример графической программы на си

Пример программы 17 графическая программа на си рисует автомобиль.

#include
#include
main()
initwindow(500, 500);// инициализируем графическое окно
// рисуем кузов
setfillstyle (1,4 ); // устанавливаем вид заливки 1 -полный, цвет заливки 4 — красный
bar(100, 150, 200, 170);// закрашенный прямоугольник нижняя часть кузова
bar(120, 150, 170, 130);// закрашенный прямоугольник верхняя часть кузова
// рисуем колеса
setcolor(15); // устанавливаем цвет колеса
circle(120, 170, 10); // левое колесо окружность ниже кузова
circle(170, 170, 10); // правое колесо окружность ниже кузова
setfillstyle (1,8); // устанавливаем вид заливки полный — 1 цвет серый — 8
floodfill(120,170,15); // закрашиваем круг левого колеса до границы круга цветом 15
floodfill(170,170,15); // закрашиваем круг левого колеса до границы круга цветом 15
getch(); // ждем нажатия кнопки
closegraph(); // выход из графического режима
>

рисунок на си

Вернуться к содержанию Перейти к следующему уроку Случайные числа в Си

Рисование фигур и контуров

В конструкторе XAML фигура — это именно тот объект, который соответствует вашим представлениям. Например, прямоугольник, круг или эллипс. Объект контур является более универсальной версией фигуры. Можно, например, изменить эти объекты или объединить их в форме новых фигур.

Для фигур и контуров используется векторная графика, поэтому их легко масштабировать для дисплеев с высоким разрешением.

Рисование фигуры

Фигуры можно найти в окне Ресурсы.

Screenshot of the Shapes category of the Assets window in Blend for Visual Studio

Перетащите любую нужную фигуру в область рисования. Затем используйте маркеры фигуры, чтобы масштабировать, поворачивать, перемещать и наклонять фигуру.

Handles

Рисование контура

Контур — это последовательность соединенных линий и кривых. Используйте контур для создания интересных фигур, которые недоступны в окне Ресурсы.

Контур можно нарисовать с помощью линии, пера или карандаша. Эти инструменты доступны на панели Средства.

Рисование прямой линии

Используйте средства Перо или Линия.

Использование средства «Перо»

Щелкните один раз в области рисования, чтобы определить начальную точку, а затем щелкните еще раз для задания конечной точки линии.

Использование средства «Линия»

В области рисования зажмите кнопку мыши в том месте, где должна начинаться линия, затем перетащите и отпустите кнопку мыши там, где линия завершается.

Рисование кривой

Используйте средство Перо.

В области рисования щелкните один раз, чтобы определить начальную точку линии, а затем зажмите и перетащите указатель мыши, чтобы задать нужную кривизну.

Если требуется замкнуть контур, щелкните начальную точку линии.

Изменение формы кривой

Используйте средство Непосредственное выделение.

Щелкните фигуру, а затем потяните за любую точку на фигуре, чтобы изменить форму кривой.

Рисование контура произвольной формы

Используйте средство Карандаш.

Нарисуйте произвольный контур в области рисования, как если бы вы пользовались настоящим карандашом.

Удаление части контура

Используйте средство Непосредственное выделение.

Выберите контур, содержащий сегмент, который требуется удалить, и нажмите кнопку Удалить .

Удаление точки контура

Используйте средство Выделение, чтобы выбрать контур. Затем с помощью средства Перо выделите точку, которую требуется удалить.

Добавление точки контура

Используйте средство Выделение, чтобы выбрать контур. С помощью средства Перо щелкните в любом месте контура, где необходимо добавить точку.

Преобразование фигуры в контур

Чтобы изменить фигуру теми же способами, которые вы использовали для изменения контура, преобразуйте фигуру в контур. Выберите фигуру, а затем щелкните Формат>Контур>Преобразовать в контур.

Функция Преобразовать в путь сейчас недоступна для приложений UWP с TargetPlatformVersion версии 10.0.16299.0 и выше.

Объединение контуров

Контуры и фигуры можно объединить в один контур.

Combine paths

Число Действие
Two shapes before combining Две фигуры до объединения
Unite США
Divide Разделить
Intersect Intersect
Exclude overlap Исключение перекрытия
Subtract Вычитание

Создание составного пути

При создании составного контура все пересекающиеся части контуров исключаются из результата, и результирующий контур принимает визуальные свойства нижнего контура.

В любой момент после создания составного пути он может быть разбит на составляющие части.

Break a compound path

Создание контура кадрирования

Контур обрезки — это контур или фигура, применяемая к другому объекту, чтобы скрыть части маскируемого объекта за пределами контура обрезки.

Практическое руководство. Создание объектов Graphics для рисования

Перед тем, как начать заниматься рисованием линий и фигур, отрисовкой текста или отображением изображений и управления ими с помощью GDI+, необходимо создать объект Graphics. Объект Graphics представляет собой поверхность рисования GDI+ и используется для создания графических изображений.

Существует два этапа работы с графикой:

  1. Создание объекта Graphics.
  2. Использование объекта Graphics для рисования линий и фигур, отрисовки текста или отображения изображений и управления ими.

Создание графического объекта

Графический объект можно создать несколькими способами.

Как создать графический объект
  • Получите ссылку на графический объект как часть PaintEventArgs события формы или элемента управления Paint. Обычно ссылка на графический объект таким образом берется при создании кода рисования для элемента управления. Аналогичным образом можно также получить графический объект в качестве свойства PrintPageEventArgs при обработке события PrintPage для объекта PrintDocument. или
  • Вызовите метод элемента управления или формы CreateGraphics, чтобы получить ссылку на объект Graphics, представляющий собой область рисования этого элемента управления или формы. Используйте этот метод, если необходимо нарисовать на форме или элементе управления, которые уже существуют. или
  • Создайте объект Graphics из любого объекта, наследуемого от Image. Этот вариант подходит если вы хотите изменить уже существующее изображение. Необходимые действия будут более подробно описаны в следующих разделах.

PaintEventArgs в обработчике событий Paint

При программировании PaintEventHandler для элементов управления или PrintPage для объекта PrintDocument, графический объект предоставляется в качестве одного из свойств PaintEventArgs или PrintPageEventArgs.

Получение ссылки на графический объект из PaintEventArgs в событии Paint
  1. Объявите объект Graphics.
  2. Назначьте переменную для ссылки на объект Graphics, переданный как часть PaintEventArgs.
  3. Введите код, чтобы нарисовать форму или элемент управления. В следующем примере показано, как ссылаться на объект Graphics из PaintEventArgs в событии Paint :
Private Sub Form1_Paint(sender As Object, pe As PaintEventArgs) Handles _ MyBase.Paint ' Declares the Graphics object and sets it to the Graphics object ' supplied in the PaintEventArgs. Dim g As Graphics = pe.Graphics ' Insert code to paint the form here. End Sub 
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs pe) < // Declares the Graphics object and sets it to the Graphics object // supplied in the PaintEventArgs. Graphics g = pe.Graphics; // Insert code to paint the form here. >
private: void Form1_Paint(System::Object ^ sender, System::Windows::Forms::PaintEventArgs ^ pe) < // Declares the Graphics object and sets it to the Graphics object // supplied in the PaintEventArgs. Graphics ^ g = pe->Graphics; // Insert code to paint the form here. > 

Метод CreateGraphics

Также можно воспользоваться методом элемента управления или формы CreateGraphics, чтобы получить ссылку на объект Graphics, представляющий собой область рисования этого элемента управления или формы.

Создание графического объекта с помощью метода CreateGraphics
  • Вызовите метод CreateGraphics для формы или элемента управления, на которых требуется отрисовка графики.
Dim g as Graphics ' Sets g to a Graphics object representing the drawing surface of the ' control or form g is a member of. g = Me.CreateGraphics 
Graphics g; // Sets g to a graphics object representing the drawing surface of the // control or form g is a member of. g = this.CreateGraphics(); 
Graphics ^ g; // Sets g to a graphics object representing the drawing surface of the // control or form g is a member of. g = this->CreateGraphics(); 

Создание из объекта изображения

Кроме того, можно создать графический объект из любого объекта, производного от класса Image.

Как создать графический объект на основе изображения
  • Вызовите метод Graphics.FromImage, указав имя переменной изображения, из которой требуется создать объект Graphics. В приведенном ниже примере показано использование объекта Bitmap:
Dim myBitmap as New Bitmap("C:\Documents and Settings\Joe\Pics\myPic.bmp") Dim g as Graphics = Graphics.FromImage(myBitmap) 
Bitmap myBitmap = new Bitmap(@"C:\Documents and Settings\Joe\Pics\myPic.bmp"); Graphics g = Graphics.FromImage(myBitmap); 
Bitmap ^ myBitmap = gcnew Bitmap("D:\\Documents and Settings\\Joe\\Pics\\myPic.bmp"); Graphics ^ g = Graphics::FromImage(myBitmap); 

Объекты Graphics можно создавать только из неиндексированных файлов формата .bmp, например 16-разрядных, 24-разрядных и 32-разрядных. Каждый пиксель неиндексированных файлов .bmp содержит цвет. В индексированных .bmp файлах же каждый пиксель содержит индекс таблицы цветов.

Рисование и обработка фигур и изображений

Объект Graphics после создания может использоваться для рисования линий и фигур, отрисовки текста или отображения изображений и управления ими. Вот основные объекты, которые используются с объектом Graphics:

  • Класс Pen — используется для рисования линий, структурирования фигур или отрисовки других геометрических представлений.
  • Класс Brush — используется для заполнения областей графики, в частности для заполненных фигур, изображений или текста.
  • Класс Font — предоставляет собой описание фигур, используемых при отрисовке текста.
  • Структура Color — представляет различные отображаемые цвета.
Использование созданного графического объекта
  • Обратитесь к соответствующему объекту, указанному выше, чтобы нарисовать необходимые объекты. Дополнительные сведения см. в следующих разделах:
Отрисовка Смотрите
Позиции Практическое руководство. Рисование линии в Windows Forms
Фигуры Практическое руководство. Рисование контурной фигуры
Текст Практическое руководство. Рисование текста в Windows Forms
изображения; Практическое руководство. Прорисовка изображений с использованием GDI+

См. также

  • Приступая к программированию графики
  • Объекты Graphics и Drawing в Windows Forms
  • Линии, кривые и фигуры
  • Практическое руководство. Прорисовка изображений с использованием GDI+

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как нарисовать эти рисунки в Си?

Author24 — интернет-сервис помощи студентам

Как подключить dll с рисунками к проекту, и использовать в нем эти рисунки
Есть dll1.dll как подключить ее к проекту? И как потом использовать рисунки которые хранятся в ней.

Как нарисовать рисунки к этим задачам?
Всем привет. Не могу сообразить, как нарисовать рисунки к задачам 16.59 и 16.62. Помогите.

Какие и как рисунки можно нарисовать, которые основаны на математических формулах?
Какие и как рисунки можно нарисовать, которые основаны на математических формулах? Есть пример .

Нарисовать рисунки
Помогите пожалуйста.

174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719

ЦитатаСообщение от goshichek Посмотреть сообщение

Помогите нарисовать данные рисунки на языке Си

Успокойтесь. Не спамьте темами и в самый короткий промежуток времени вам помогут. В течение года, если тема не затеряется вам ответят.

3870 / 2463 / 418
Регистрация: 09.09.2017
Сообщений: 10,757

ЦитатаСообщение от goshichek Посмотреть сообщение

как нарисовать эти рисунки в Си?

никак. В Си нет средств для рисования. Зато есть куча сторонних библиотек от антиквариата вроде graphics.h до OpenGL. Пока не выберете какую-либо, вам не смогут помочь при всем желании

94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 379
COKPOWEHEU,

есть ещё WinApi:)

@ COKPOWEHEU

Michail97, а чем примечателен winapi? Всего лишь одна из пары десятков библиотек.

Кликните здесь для просмотра всего текста

graphics.h (от Borland)
winapi (в т.ч. VCL — обертка от Borland)
DirectX
OpenGL
GLUT
X11
SDL
curses (не совсем графика, но близко)
это те которые я щупал. Плюс те о которых слышал
QT
GTK
SFML
framebuffer
aalib (тоже не очень похоже, но использовать можно)
это то что вспомнилось с ходу

Меню пользователя @ COKPOWEHEU

838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
goshichek, если для windows то вот написал.

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
#include #include #include #ifdef _MSC_VER #pragma warning(disable:4244) #endif int main(void){ POINT ds[4], ps[32], bp; HBRUSH hbr; HGDIOBJ old; int i, j, left; double t, rad; HWND hwnd = GetConsoleWindow(); HDC hdc = GetDC(hwnd); HDC mdc = CreateCompatibleDC(hdc); int size = 200; int mid = size / 2; int width = size * 3 + mid / 8 * 2; int height = size; HBITMAP hbm = CreateCompatibleBitmap(hdc, width, height); SelectObject(mdc, hbm); hbr = CreateHatchBrush(HS_BDIAGONAL, RGB(0, 0, 0)); PatBlt(mdc, 0, 0, width, height, WHITENESS); GetBrushOrgEx(mdc, &bp); //1-фигура old = SelectObject(mdc, hbr); Ellipse(mdc, 0, 0, size, size); SelectObject(mdc, old); ds[0].x = mid; ds[0].y = 1; ds[1].x = size - 1; ds[1].y = mid; ds[2].x = mid; ds[2].y = size - 1; ds[3].x = 1; ds[3].y = mid; Polygon(mdc, ds, 4); left = size + mid / 8; //2-фигура rad = acos(-1.0) / 180.0; for(j = 0, i = 180; i  360; i += 6, ++j){ t = (double)i * rad; ps[j].x = (left + mid) + mid * sin(t); ps[j].y = mid + mid * cos(t); } ps[j].x = left + size; ps[j].y = mid; old = SelectObject(mdc, hbr); SetBrushOrgEx(mdc, left, 0, NULL); Polygon(mdc, ps, 32); left += size + mid / 8; //3-фигура ds[0].x = left + mid; ds[0].y = 0; ds[1].x = left + size; ds[1].y = mid; ds[2].x = left; ds[2].y = mid; SetBrushOrgEx(mdc, left + mid, 0, NULL); Polygon(mdc, ds, 3); SetBrushOrgEx(mdc, bp.x, bp.y, NULL); SelectObject(mdc, old); //выход Esc while(!(GetKeyState(VK_ESCAPE) & 0x80)){ BitBlt(hdc, 0, 0, width, height, mdc, 0, 0, SRCCOPY); Sleep(100); } DeleteDC(mdc); DeleteObject(hbm); DeleteObject(hbr); ReleaseDC(hwnd, hdc); return 0; }

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

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