Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для Leotor
1 / 1 / 2
Регистрация: 06.04.2011
Сообщений: 27
.NET 4.x

Изменение масштаба картинки в PictureBox

03.06.2011, 14:26. Показов 3723. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема такова! У меня есть карта, загруженная, как в свойствах PictureBox Image(System.Drawing.Bitmap)- я так понимаю она теперь в ресурсах? Она большая и поэтому не влязит в PictureBox, в свойствах указана автоматическое появление полос прокрутки, и сделан CheckBox для того чтоб эту кару делать по размеру экрана свойством Dock.

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

Еще мне не нравиться, что событие Paint сразу пытается мне нарисовать эту фигуру, а она еще не имеет координат, таким образом, выдает ошибку, я ограничил это несколько кардинальным способом, но мне кажется это не правильно. Быть может, как то можно по-другому PictureBox перерисовывать. И хотелось бы, чтоб фигура рисовалась только по нажатию на кнопки и после этого PictureBox перерисовывался с новой фигурой каждый раз при изменении.


Вот мой код:
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
// маштаб карты
 private void sizeCheckBox_CheckedChanged(object sender, EventArgs e)
        {
            
            if (sizeCheckBox.Checked)
                mapBox.Dock = DockStyle.None;
            else
                mapBox.Dock = DockStyle.Fill;
 
        }
 
  //Задание начальных координат
        private void mapBox_MouseClick(object sender, MouseEventArgs e)
        {
             mx = Convert.ToInt32(e.X); // координата по оси X
             my = Convert.ToInt32(e.Y); // координата по оси Y
        }
 
        private void btnPoint_Click(object sender,EventArgs e )
        {
            // Рисуем направление
              Graphics g = e.Graphics;
               Color brushColor = Color.FromArgb(160, 255, 0, 0);
               System.Drawing.SolidBrush myBrush = new SolidBrush(brushColor);
 
               g.FillPolygon(myBrush,myPoints.ToArray());
               g.FillPolygon(myBrush, myPoints2.ToArray());
          
        }
 
        private void mapBox_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
 
            if (Paint == 1 )
            {
                Color brushColor = Color.FromArgb(160, 255, 0, 0);
                System.Drawing.SolidBrush myBrush = new SolidBrush(brushColor);
 
                g.FillPolygon(myBrush,myPoints.ToArray());
                g.FillPolygon(myBrush, myPoints2.ToArray());
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2011, 14:26
Ответы с готовыми решениями:

Изменение масштаба PictureBox
Имеется программа для построения графиков функций. Но размер единичного отрезка на таком графике получается очень маленьким. Как бы...

Изменение масштаба в PictureBox
Всем привет!!!Подскажите пожалуйста, как можно изменять масштаб в PictureBox? Хочу сделать с помощью "ползунка", а его нет в...

Изменение картинки в PictureBox
Всем привет! Работаю в Visual Studio 2015, требуется на одной форме при нажатии на кнопку сменить картинку, имеется 2 картинки на пробу,...

7
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
03.06.2011, 14:40
Цитата Сообщение от Leotor Посмотреть сообщение
Далее я рисую поверх этой карты фигуру, указывающую направление, но проблема в том, что когда я делаю карту меньше, то масштаб фигуры не меняется. Как сделать чтоб масштаб фигура менялся с масштабом самой карты?
Вводить коэффициенты масштаба и координаты положения в зависимости от него.
Цитата Сообщение от Leotor Посмотреть сообщение
Еще мне не нравиться, что событие Paint сразу пытается мне нарисовать эту фигуру, а она еще не имеет координат, таким образом, выдает ошибку, я ограничил это несколько кардинальным способом, но мне кажется это не правильно. Быть может, как то можно по-другому PictureBox перерисовывать. И хотелось бы, чтоб фигура рисовалась только по нажатию на кнопки и после этого PictureBox перерисовывался с новой фигурой каждый раз при изменении.
Или проверять размер myPoints или оставить как есть. Лучше оставить как есть, т.к. это позволит при желании "выключать" маркер.
1
 Аватар для Leotor
1 / 1 / 2
Регистрация: 06.04.2011
Сообщений: 27
03.06.2011, 14:57  [ТС]
Это конечно не совсем то что я хотел, но всеравно спасибо за ответ.
Я думаю может мне новй Bitmap организовать в него карту и на нем же рисовать и тогда может и будет управляться через Dock? Мне сам то маштаб чесно говоря не нужен мне просто надо, чтоб карта была во весь экран и по размеру, и все.
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
03.06.2011, 15:06
Можно и так, но тогда лучше карту разбить по сетке, т.к. это позволит при необходимости быстро восстановить карту в исходном состоянии, особенно если карта большого размера или высокого качества. А вообще вопрос по созданию карт менеджера уже не раз поднималась в этом разделе. Если поищите на старых страницах, то много полезной информации найдете.
1
 Аватар для Leotor
1 / 1 / 2
Регистрация: 06.04.2011
Сообщений: 27
03.06.2011, 15:50  [ТС]
Сделал так!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void mapBox_Paint(object sender, PaintEventArgs e)
        {
            //Graphics g = e.Graphics;//Если так то кисть прозрачная , но не мштабируеться направление
            Graphics g = Graphics.FromImage(mapBox.Image);//если так то все в норме как надо, 
                                                                              //только кисть не прозрачная почему то 
 
            if (Paint == 1 )
            {
                
                Color brushColor = Color.FromArgb(160, 255, 0, 0);
                System.Drawing.SolidBrush myBrush = new SolidBrush(brushColor);
 
                g.FillPolygon(myBrush,myPoints.ToArray());
                g.FillPolygon(myBrush, myPoints2.ToArray());
            }
        }
Не могу понять почему кисть перестала быть прозрачной?
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
03.06.2011, 16:05
Потому что рисовать надо не в Paint много раз, а один раз, например в btnPoint_Click. Многократная отрисовка делает ее непрозрачной. Paint срабатывает многократно и получается такая проблема. Если сделать прозрачность порядка 1 % и многократно свернуть/развернуть форму, то с каждым разворачиванием маркер будет все более и более непрозрачным.
1
 Аватар для Leotor
1 / 1 / 2
Регистрация: 06.04.2011
Сообщений: 27
03.06.2011, 16:24  [ТС]
Все супер! XAHOK лучший! Все получилось как надо. Огромное спасибо.
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
03.06.2011, 16:28
Всегда пожалуйста. Сам когда-то мучился))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2011, 16:28
Помогаю со студенческими работами здесь

Изменение картинки в PictureBox при наведении курсора
При наведении на picturebox фон изменяется на другую картинку. Как это сделать?

Прозрачный фон у картинки на элементе PictureBox непрозрачен для другого PictureBox
Здравствуйте! Проблема состоит в следующем! У меня есть картинка .png с прозрачным фоном. При создании PictureBox с этой картинкой, фон по...

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

Изменение масштаба
Подскажите, при изменении масштаба у меня сползают некоторые блоки. С чем это связано ? margin: 0 auto?; http://31042.www7.site/04/

Изменение масштаба объектов
При увеличение/уменьшении окна приложения все объекты тоже должны менять свой масштаб.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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