Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109

Как производить закрашивание определенной части рисунка произвольной формы

19.11.2012, 09:31. Показов 2193. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня такой вопрос, как можно производить закрашивание определенной части рисунка, произвольной формы. Для примера, допустим беру такой рисунок :


и нужно его закрашивать следующим образом:






я предполагаю что для этого можно использовать маску, но каким образом пока не знаю ... что можете посоветовать ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2012, 09:31
Ответы с готовыми решениями:

CorelDraw: как получить площадь кривой произвольной формы, в которой есть "дырки" произвольной формы?
Стоит задача рассчитать площадь сложной кривой. В CorelDraw у кривых есть стандартное свойство, отображающее площадь кривой. ...

Какая функция реализует деление рисунка на части и всплывающее окно при наведении на часть рисунка
Добрый день, уважаемые. Какая функция реализует деление рисунка на части и всплывающее окно при наведении на часть рисунка. Т.е....

Закрашивание части ячейки
Можно ли закрасить часть ячейки StringGrid'a?

16
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
19.11.2012, 09:40
DenProx, что это и для чего используется?
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 09:43  [ТС]
nio, в будущем нужен будет индикатор уровня (для примера воды) в баке. Суть не в том для чего, задачи могут быть разными, мне важен сам способ закрашивания произвольной формы.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
19.11.2012, 09:58
DenProx, если это индикатор, я бы не стал его закрашивать, я бы просто взял , к примеру, 10 картинок с разными уровнями и менял их в зависимости от изменения значения на 10%.
Закрашивать именно эту фигуру не самое легкое решение, т.к. в Graphics(а рисование производится именно им) такого примитива нет. Если уже делать автоматически рисуемый индикатор, то лучше использовать прямоугольник.
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 10:01  [ТС]
nio, ну с прямоугольником все понятно ... мне и было интересно каким образом реализуется закрашивание не стандартных форм
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
19.11.2012, 10:29
DenProx, с нестандартными:
- простой способ: набор изменяющихся картинок
- сложный способ: определение замкнутого контура, и его закрашивание
- быдлокодерский: привязка кода к картинке - просто в коде прописывается, на каком уровне какой длинны и по каким координатам рисовать линии (прямоугольники); в этом случае изменение картинки, её размера или отображающего контрола приведет к ошибкам отображения.
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 10:41  [ТС]
nio, ясно ) буду знать) Еще тогда такой вопрос, возможно ли сделать прозрачным цвет закрашивания? Точнее изменять свойство видимости?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
19.11.2012, 10:48
Цитата Сообщение от DenProx Посмотреть сообщение
Еще тогда такой вопрос, возможно ли сделать прозрачным цвет закрашивания? Точнее изменять свойство видимости?
Нет. Прозрачность поддерживается только для форм.
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 11:04  [ТС]
nio, а как тогда это вообще делается ? ) OpenGL или DX ?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
19.11.2012, 11:33
DenProx, на сколько мне известно с прозрачностью(и другими визуальными излишествами) можно неплохо работать на WPF, а "OpenGL или DX" - это уж точно подойдет.
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 11:38  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
можно неплохо работать на WPF
А можно по подробнее, что это ? ) Есть учебники на русском ?)
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
19.11.2012, 11:48
Цитата Сообщение от DenProx Посмотреть сообщение
А можно по подробнее, что это ? )
Это технология в составе .Net, на форуме этому посвящен целый раздел https://www.cyberforum.ru/wpf-silverlight/ (про учебники там говорилось и не раз)
Обсуждать эту технологию далее в этой теме не следует, т.к. к топику это не относится.
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 11:50  [ТС]
nio, Спасибо
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
19.11.2012, 13:30
Сразу же извиняюсь, что код на барсе. Но принцип будет понятен.
Прилагаю и проект
Код на VB .NET, родственнике C#
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Class Form1
    Dim Water As New Bitmap("Вода.png")
    Dim Cont As New Bitmap("Бак.png")
    Dim Pic As Bitmap
    Dim G As Graphics
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Pic = New Bitmap(Cont)
        G = Graphics.FromImage(Pic)
        TrackBar1.Maximum = Water.Height
        Label1.Parent = PictureBox1
        PictureBox1.BackgroundImage = Cont
    End Sub
    Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
        Dim Volume As Integer = Water.Height - TrackBar1.Value
        G.Clear(Color.Transparent)
        G.DrawImage(Cont, New Rectangle(0, 0, Cont.Width, Cont.Height))
        G.DrawImage(Water, New Rectangle(0, Volume, Water.Width, Water.Height), New Rectangle(0, Volume, Water.Width, Water.Height), GraphicsUnit.Pixel)
        PictureBox1.BackgroundImage = Pic
        PictureBox1.Refresh()
        Label1.Text = "Бак заполнен на" & vbCrLf & CInt((TrackBar1.Value / Water.Height) * 100) & "%"
    End Sub
End Class
Миниатюры
Как производить закрашивание определенной части рисунка произвольной формы  
Вложения
Тип файла: rar Бак с водой.rar (157.5 Кб, 4 просмотров)
2
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 13:42  [ТС]
Памирыч, а в теории данный метод как звучит ?))) Выглядит хорошо) Правда есть один минус,который WPF исчерпывает) Тут используется растровое изображение, и при изменении размера формы, качество будет ухудшаться, особенно при увеличении. В идеале мне нужно будет сделать такой компонент, который сохранял бы свои свойства (векторное изображение). Скачал уже пару учебников по WPF + сайт один нашел хороший, буду изучать

А вообще спасибо за пример! Пригодится

p.s. если я правильно понял, тут просто два изображения друг на друге, и у верхнего что с водой, просто удаляется или дорисовывается часть в зависимости от положения ТракБара ?
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
19.11.2012, 13:47
Цитата Сообщение от DenProx Посмотреть сообщение
а в теории данный метод как звучит
Так же как и выглядит. Если сделать по уму, то можно передавать в метод литры и видеть результат.

Вы правы насчет масштабирования - при увеличении посыплются пикселы.
Нужно или самому рисовать с помощью примитивов (в принципе, не очень сложно при желании) так же делая заливку градиентом или текстурой, либо как-то работать с вектором (никогда не пробовал в VS грузить вектор)

А с технологией WPF вообще не знаком
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
19.11.2012, 13:49  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
А с технологией WPF вообще не знаком
Я тоже Но судя по тому что про нее пишут, вещь классная
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2012, 13:49
Помогаю со студенческими работами здесь

Как сделать прокрутку до определенной части страницы?
всем привет, подскажите пожалуйста как сделать прокрутку до определенной части страницы при клике на кнопку, т.е. при клике на кнопку...

Измерения рисунка как фон формы
Добрый день, решил в БД добавить поздравление при наступлении определенной даты, создал форму, на которой фоном сделап рисунок. Подскажите...

Как привязать плавающие контейнеры к определенной части фона?
Как привязать плавающие контейнеры к определенной части фона? А то при изменении маштаба фон и контент разбегаются.

Как изменить цвет фона определенной СТРОКИ в Табличной Части?
Имеется некое условие и когда оно выполняется определенная строка должна окрашиваться. Как это реализовать?

Как из модуля формы обратиться к табличной части другой формы?
Как из модуля формы обратиться к табличной части другой формы внутри одного документа?


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru