Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/58: Рейтинг темы: голосов - 58, средняя оценка - 4.79
3 / 3 / 1
Регистрация: 06.04.2010
Сообщений: 20

Как реализовать кнопки "лупы" - приблизить, отдалить и исходный размер изображения

30.11.2011, 01:33. Показов 12144. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, есть pictureBox, в который загружается какой-либо файл, например, формата hgt или grd.
Как реализовать кнопки "лупы" - приблизить, отдалить и исходный размер изображения. Пыталась сделать как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//кнопка приближения
private void toolStripButton2_Click(object sender, EventArgs e)
        {
          
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox1.Scale(2); 
            
           
        }
//кнопка отдаления
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
                
        }
Очень коряво получается, это совсем не то, что нужно. П
Ещё, подскажите пожалуйста, как можно реализовать кнопку "отмена действия".
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2011, 01:33
Ответы с готовыми решениями:

Реализовать алгоритм сортировки прямым слиянием. Размер массива задаёт пользователь. Вывести на экран исходный и отсорти
Реализовать алгоритм сортировки прямым слиянием. Размер массива задаёт пользователь. Вывести на экран исходный и отсортированный массивы....

Сделать эффект лупы на js аналог экранной лупы windows
Всем привет, подскажите можно ли сделать экранную лупу на сайте, это требование для слабовидящих. Нужен именно такой эффект. Лупа должна...

Как отдалить проекцию?
Народ создал программу по урокам Nehe, вот он #include <GL\glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); ...

17
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
30.11.2011, 02:27
Подгонка изображения под произвольный прямоугольник.

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
 public static class FitImage
    {
 
        public static Image FitImageToSize(Image curImage, Size fitSize)
        {
            int width = 0, height = 0;
            float deltaHeight = fitSize.Height / (float)curImage.Height,
                   deltaWidth = fitSize.Width / (float)curImage.Width;
 
            if (deltaHeight < deltaWidth)
            {
                height = fitSize.Height;
                width = height * curImage.Width / curImage.Height;
            }
            else
            {
                width = fitSize.Width;
                height = width * curImage.Height / curImage.Width;
            }
            Bitmap imgOutput = new Bitmap(width, height);
            imgOutput.MakeTransparent(Color.Black);
            Graphics newGraphics = Graphics.FromImage(imgOutput);
            newGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            newGraphics.Clear(Color.FromArgb(0, 255, 255, 255));
            newGraphics.DrawImage(curImage, 0, 0, width, height);
            newGraphics.Flush();
            return imgOutput;
        }
    }
соответственно при увеличении или уменьшении ставим нужные размеры, при отмене показываем по умолчанию.
1
3 / 3 / 1
Регистрация: 06.04.2010
Сообщений: 20
02.12.2011, 19:06  [ТС]
Нашла в инете такой способ:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//приблизить
private void toolStripButton2_Click(object sender, EventArgs e)
        {
            if (toolStripButton2.Enabled == true)
            {
                pictureBox1.Height += 70;
                pictureBox1.Width += 70;
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }
//отдалить
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            if (toolStripButton3.Enabled == true)
            {
                pictureBox1.Height -= 70;
                pictureBox1.Width -= 70;
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }
Может быть кому-то надо будет. Хотя if-ы можно и не писать
1
02.12.2011, 19:54

Не по теме:

Цитата Сообщение от GEIN Посмотреть сообщение
Хотя if-ы можно и не писать
== true тоже можно не писать, так как if подразумевает истинность выражения в скобках.

0
3 / 3 / 1
Регистрация: 06.04.2010
Сообщений: 20
02.12.2011, 20:17  [ТС]
Ну я имела в виду, если if не ставится, то и условие в скобках не нужно прописывать
Как же все-таки реализовать кнопку "Отмена"? Копаться в потоках?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
02.12.2011, 20:19
Ну если пользоваться найденным в инете способом, то может отменой будет размер pictureBox1 по умолчанию?

Добавлено через 13 секунд
Цитата Сообщение от GEIN Посмотреть сообщение
Копаться в потоках?
То есть?
0
3 / 3 / 1
Регистрация: 06.04.2010
Сообщений: 20
02.12.2011, 21:30  [ТС]
Нет, отмена не для лупы. А для любого действия.
Например, нанесли объект и решили, что он не нужен. Нажали отмена и нет объекта. Что-то в этом роде.
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
02.12.2011, 22:16
Реализация отмены так или иначе лежит на Ваших плечах, потому как отменой можно посчитать и сдвиг курсора в предыдущее положение...
Студия, например, позволяет отменять далеко не все действия, какие-то так или иначе являются конечными, т.е. сбрасывают варианты возвращения предыдущего состояния в ноль. Также студия хранит список действий для отмены для каждой вкладки, пока та не будет закрыта. Определитесь с тем, какие действия могут быть отменены и перед применением запоминайте состояние объекта. Также можно на уровне настроек задавать максимальное количество шагов для отмены, что используется в программах, где для сохранения состояния на всех или просто многих этапах требуется значительное количество ресурсов.
1
19 / 34 / 11
Регистрация: 09.10.2010
Сообщений: 420
03.12.2011, 21:28
Здравствуйте, а как называется метод, чтобы колёсиком мыши крутить? Не нашел в "Свойствах", хочу сделать такое же масштабирование мышкой.
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
03.12.2011, 21:31
Метода нет такого, а событие - MouseWheel.
1
19 / 34 / 11
Регистрация: 09.10.2010
Сообщений: 420
03.12.2011, 21:32
C#
1
pictureBox1.Dispose(); //- не, не так сбрасывать всё?
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
03.12.2011, 21:51
Это смотря что сбрасывать... Объект вы таким образом точно сбросите... прям аж со счетов существующих объектов программы...
И я бы не советовал в чужой теме вопросы не по существу задавать...
0
19 / 34 / 11
Регистрация: 09.10.2010
Сообщений: 420
03.12.2011, 22:07
Цитата Сообщение от GEIN Посмотреть сообщение
Например, нанесли объект и решили, что он не нужен. Нажали отмена и нет объекта. Что-то в этом роде.

Не по теме:

SpawnDDR, а мне кажется всё по теме. Он про лупу и я про лупу.

0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
03.12.2011, 22:19
Изображение так или иначе хранится в PictureBox, независимо от способа отрисовки, т.е. Scale Вы можете менять, эффект масштабирования будет применяться, а когда потребуется, просто сбросите его в первоначальное значение и не надо Dispose поднимать.
0
3 / 3 / 1
Регистрация: 06.04.2010
Сообщений: 20
05.12.2011, 19:01  [ТС]
В общем, ситуация такая:
заношу изображение (рельеф) в pictureBox.BackgroundImage, а просто в PictureBox.Image рисую какие-нибудь объекты. Но теперь возникла проблема с масштабированием:
C#
1
2
3
pictureBox1.Height += 70;
pictureBox1.Width += 70;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
Теперь приближаются только объекты, а заднее изображение не изменяется. Подскажите, пожалуйста, как избавиться от этой проблемы?
0
3 / 3 / 1
Регистрация: 06.04.2010
Сообщений: 20
28.03.2012, 00:41  [ТС]
Масштабирую фоновое изображение и объекты, нарисованные с Image:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void toolStripButton2_Click(object sender, EventArgs e)
        { 
                pictureBox1.Height += 70;
                pictureBox1.Width += 70;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;
        }
 
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
                pictureBox1.Height -= 70;
                pictureBox1.Width -= 70;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;
        }
И при именно масштабировании все хорошо, но вот если рисовать объекты после масштабирования, то получается полная ерунда - курсором рисую в одном месте, а объект рисуется в другом.

Рисую линию следующим образом:
C#
1
2
3
4
5
6
7
8
9
 if (e.Button == MouseButtons.Left)
                {
                    grBmp.FillRectangle(pen.Brush, e.X, e.Y, 1, 1);
                    grBmp.DrawLine(pen, eX, eY, e.X, e.Y);
                    this.pictureBox1.Invalidate();
                    count += (int)Math.Round(Math.Sqrt((e.X - eX) * (e.Y - eX) + (e.X - eY) * (e.Y - eY)));
                    eX = e.X;
                    eY = e.Y;
                }
Я предполагаю, что проблема где-то зарыта в е.Х, е.Y, наверно, при масштабировании должно быть что-то другое, но я не знаю, что...
Помогите, пожалуйста
0
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 2
08.01.2017, 22:50
GEIN, Можеш исходник скинуть
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
09.01.2017, 22:14
GEIN, по поводу отмены посмотрите тут. Если я правильно понял задачу, это как раз то, что Вам нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2017, 22:14
Помогаю со студенческими работами здесь

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

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

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

Как отдалить треугольник, чтобы он поместился в окно?
Всем привет. Есть пару вопросов, подскажите пожалуйста. Вот допустим имеем треугольник glBegin(GL_TRIANGLES); glVertex3d(0.0,...

Необходимо разделить исходный код на файлы. Как это реализовать в Visual Studio?
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;map&gt; #include &lt;cctype&gt; #include &lt;sstream&gt; #include &lt;conio.h&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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
/ * Дана цепь постоянного тока с 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