7 / 7 / 1
Регистрация: 04.03.2011
Сообщений: 87
1

Заливка сектора GDI+

30.05.2013, 21:49. Показов 2434. Ответов 2
Метки нет (Все метки)

Доброго времени, коллеги!
Что-то запутался совсем. Не получается сделать заливку области GDI+.
C++
1
2
3
4
5
Gdiplus::Graphics * graphics;
     graphics = new  Gdiplus::Graphics(Form1->Image1->Canvas->Handle);
     graphics->SetSmoothingMode(Gdiplus::SmoothingModeHighQuality);
     Gdiplus::Pen BlackPen(Gdiplus::Color(255, 0, 0, 0),1);
    graphics->DrawEllipse(&BlackPen,(float)x1,(float)y1,(float)(x2-x1),(float)(y2-y1-1));
Так я рисую круг . Внутри данного круга рисую меньший круг.
Линии из центра делят два круга на сектора. Не могу понять как сделать заливку между двумя кругами и секторами.
Или хотя бы помогите сделать заливку FillPie сектора.


Спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2013, 21:49
Ответы с готовыми решениями:

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

Заливка средствами GDI+ как в paint
как можно при помощи GDI+ залить область, ограниченную кривыми, как в paint?

GDI+ и заливка с помощью методов библиотеки GDI32.dll
Делаю аналог Paint, возникла проблема: необходимо залить область цветом или штрихованной кистью....

Есть ли в WPF полноценная замена GDI+? Чтобы можно было всё, что можно в GDI+? Просто думаю углубляться в работу с изображениями в WPF или GDI.
Ну собственно весь вопрос в заголовке темы.

2
LK
Заблокирован
31.05.2013, 01:40 2
так ли нужна GDI
7.1 Поддержка графики в C++Builder

C++Builder инкапсулирует функции Windows GDI на разных уровнях. Наиболее важным здесь является способ, посредством которого графические компоненты представляют свои изображения на экране монитора. При прямом вызове функции GDI необходимо передавать им дескриптор контекста устройства (device context handle), который задает выбранные вами орудия рисования - перья, кисти ц шрифты. После завершения работы с графическими изображениями, вы обязаны восстановить контекст устройства в исходное состояние и только потом освободиться от него.

Вместо того, чтобы вынуждать вас работать с графикой на таком уровне детализации, C++Builder предоставляет вам простой и завершенный интерфейс посредством свойства Canvas (Канва) графических компонент. Это свойство про-инициализирует правильный контекст устройства и освободит его в нужное время, когда вы прекратите рисование. По аналогии с функциями Windows GDI канва имеет вложенные свойства, представляющие характеристики пера, кисти и шрифта.

Единственное, что должен сделать пользователь, работая с графическими компонентами, - это определить характеристики используемых орудий рисования. Вам не потребуется следить за системными ресурсами при создании, выборе и освобождении орудий. Канва сама позаботится об этом.

Одно из достоинств, которые проявляет C++Builder при работе с графикой, -это использование кэшированной памяти для графических ресурсов системы. Если ваша программа повторно создает, использует и освобождает, скажем, перо некоторого конкретного вида, вам приходится повторять эти шаги каждый раз, когда вы используете такое перо. Поскольку C++Builder использует кэш-память для хранения графических ресурсов, увеличивается вероятность, что часто употребляемое орудие рисования будет повторно выбираться из кэш-памяти, а не воссоздаваться каждый раз заново. Очевидно, что вследствие этого заметно возрастет эффективность повторяющихся операций вашего графического приложения.

Листинг 7.1 содержит два фрагмента кода, которые наглядно иллюстрируют, насколько C++Builder упрощает программирование графики. Первый фрагмент применяет стандартные функции GDI для того, чтобы нарисовать в окне OWL приложения для Windows желтый эллипс, обведенный синим контуром. Во втором фрагменте та же задача решается посредством канвы рисования.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void TMyWindow::Paint(TDC& PaintDC, bool erase, TRect& rect)
{
  HPEN PenHandle, OldPenHandle;
  HBRUSH BrushHandle, OldBrushHandle;
  PenHandle = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
  OldPenHandle = SelectObject(PaintDC, PenHandle);
  BrushHandle = CreateSolidBrush(RGB(255, 255, 0));
  OldBrushHandle = SelectObject(PaintDC, BrushHandle);
  Ellipse(10, 10, 50, 50);
  SelectObject(OldBrushHandle) ;
  DeleteObject(BrushHandle) ;
  SelectObject(OldPenHandle);
  DeleteObject(PenHandle) ;
}
C++
1
2
3
4
5
6
void_fastcall TFormI::FormPaint(TObject *Sender)
{
  Canvas->Pen->Color = clBlue; // выбрать цвет контура
  Canvas->Brush->Color = clYellow; // выбрать цвет заливки
  Canvas->Ellipse(10, 20, 50, 50); // нарисовать эллипс
}
Листинг 7.1. Использование функций Windows GDI u свойства канвы на примере рисования эллипса.

Copied from: http://articles.org.ru/docum/builder/7.php
3
Эксперт С++
8289 / 6120 / 613
Регистрация: 10.12.2010
Сообщений: 28,616
Записей в блоге: 30
01.06.2013, 09:08 3
https://www.cyberforum.ru/blog... og477.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2013, 09:08

Разбить область на сектора. Цвет нарисованной линии должен зависеть от сектора
Форма делится на сектора (их количество задает пользователь). Курсором мыши можно рисовать линии....

Переназначенные сектора, нестабильные сектора и неисправимые ошибки секторов
Решил я как то проверить с помощью Crystal Disk Info и на те сразу три ошибки. Насколько это опасно...

Заливка картинки, а потом заливка заливки и прочее
В общем требуется вот что: Единственное, что у меня получилось сделать - черную заливку поверх...

Поменять местами элементы верхнего сектора матрицы с элементами правого сектора второй матрицы и наоборот
В двух квадратных матрицах выделено четыре сектора, которые ограничены диагоналями: верхний,...


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

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

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