Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/89: Рейтинг темы: голосов - 89, средняя оценка - 4.64
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
.NET 3.x

Увеличение картинки

17.04.2010, 12:12. Показов 16626. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь увеличить картинку в pictureBox1 крутя trackBar1

C#
1
2
3
4
5
private void trackBar1_Scroll(object sender, EventArgs e)
        {
            pictureBox1.Width = Convert.ToInt16(pictureBox1.Image.Width * trackBar1.Value);
            pictureBox1.Height = Convert.ToInt16(pictureBox1.Image.Height * trackBar1.Value);
        }
Но картинка как то не так увеличивается.. т.е. увеличиваясь она ещё и "уходит" в правый нижний угол при увеличении trackBar1.

Как получше организовать увеличение картинки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2010, 12:12
Ответы с готовыми решениями:

можно ли (и как) получить размеры картинки из файла до вывода собственно картинки на клиента?
Подскажите, плз, можно ли (и как) получить размеры картинки из файла до вывода собственно картинки на клиента? Желательно с помощью...

Наведение мышки-увеличение картинки
Здравствуйте)Подскажите пожалуйста,как сделать так,чтобы при наведении мыши на картинку(PictureBox) она увеличивалась в размерах.Делаю...

Увеличение и уменьшение картинки
Помогите реализовать на C#: При первом щелчке картинка увеличивалась, а при повторном - уменьшалась? И при этом всегда оставалась на...

34
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
17.04.2010, 12:50
Я бы использовал trackBar1 как множитель или проценты от пнервоначального размера. Примерно так:
C#
1
2
3
4
5
private void trackBar1_Scroll(object sender, EventArgs e)
        {
            pictureBox1.Width *= (int)trackBar1.Value;
            pictureBox1.Height *= (int)trackBar1.Value;
        }
Добавлено через 17 минут
Хотя вот эторешение лучше:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public partial class Form1 : Form
    {
        Size StartSize;
 
        public Form1()
        {
            InitializeComponent();
            StartSize = pictureBox1.Size;
        }
 
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            pictureBox1.Width = StartSize.Width * trackBar1.Value;
            pictureBox1.Height = StartSize.Height * trackBar1.Value;
 
        }
    }
при этом у pictureBox1 свойство SizeMode установлено в Zoom
1
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
17.04.2010, 13:21  [ТС]
Спасибо, так действительно лучше!

Вот теперь возник вопрос ещё один)
Картинка увеличилась и перестала помещаться в pictureBox. Как сделать так чтобы двигать изображение курсором?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
17.04.2010, 13:34
Цитата Сообщение от konrin Посмотреть сообщение
Картинка увеличилась и перестала помещаться в pictureBox
Такого быть не может: в данном случае увеличивался сам pictureBox, а не картинка в нем.
А что б таскать объекты используйте события MouseDown,MouseUp, MouseMove требуемого компонента
0
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
17.04.2010, 14:02  [ТС]
Цитата Сообщение от konrin Посмотреть сообщение
Картинка увеличилась и перестала помещаться в pictureBox
она стала вылезать за пределы pictureBox

Добавлено через 22 минуты
Цитата Сообщение от nio Посмотреть сообщение
Хотя вот эторешение лучше:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class Form1 : Form
* * {
* * * * Size StartSize;
public Form1()
* * * * {
* * * * * * InitializeComponent();
* * * * * * StartSize = pictureBox1.Size;
* * * * }
private void trackBar1_Scroll(object sender, EventArgs e)
* * * * {
* * * * * * pictureBox1.Width = StartSize.Width * trackBar1.Value;
* * * * * * pictureBox1.Height = StartSize.Height * trackBar1.Value;
}
* * }
Так в том то и дело, что этот пример увеличивает сам бокс, а не картинку в нём.

Как картинку увеличить?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
17.04.2010, 14:11
Цитата Сообщение от nio Посмотреть сообщение
при этом у pictureBox1 свойство SizeMode установлено в Zoom
внимательнее

Добавлено через 36 секунд
правда при этом увеличивается и бокс и катинка

Добавлено через 5 минут
Если вставить бокс в панель, то его можно расматривать как картинку и только так просто можно будет обеспечивать таскание. Если изменять размеры конкретно изображения, то там с перетаскиванием придется повозиться.
0
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
17.04.2010, 14:12  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
правда при этом увеличивается и бокс и катинка
воот Нужно увеличить картинку только!
Как вот только?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
17.04.2010, 14:22
Тут придется покрутить класс Image или Bitmap , а потом измененное изображение боксу присваивать.
0
7 / 7 / 2
Регистрация: 20.02.2010
Сообщений: 27
17.04.2010, 14:30  [ТС]
А если вот так вот:

Запоминаем положение бокса и картинки
C#
1
2
3
4
5
6
7
8
public Form1()
        {
            InitializeComponent();
            pbh = pictureBox1.Height;
            pbw = pictureBox1.Width;
            pbX = pictureBox1.Location.X;
            pbY = pictureBox1.Location.Y;
        }
и в событии делаем следующие:
C#
1
2
3
4
5
6
7
8
9
10
private void trackBar1_Scroll(object sender, EventArgs e)
        {
            pictureBox1.Width = StartSize.Width * trackBar1.Value;
            pictureBox1.Height = StartSize.Height * trackBar1.Value;
            
            // Размещаем в центре области
            pictureBox1.Left = pbX + (pbw - pictureBox1.Width) / 2;
            pictureBox1.Top = pbY + (pbh - pictureBox1.Height) / 2;
            
        }
В этом случаи бокс будет прежним, а картинка маштабнётся.
Но есть одно НО, когда форму, скажем, раскрываешь, бокс сохраняет свои первоначальный размеры.
Есть ли событие по раскрытию окна у формы? Если есть, то можно было бы "перезапомнить" положение бокса или я не прав?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
17.04.2010, 14:40
Картинка не изменится, в данном случае ты п прежнему меняешь координаты и размер бокса.
За размер изображения отвечает pictureBox1.Image.Width и pictureBox1.Image.Height, но они только для чтения, поэтому физический размер картинки можно изменить заменив саму картинку.
Попробуй все-таки вариант с панелью.
Form1_SizeChanged - событие происходящее при изменении размера окна.
0
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
27.10.2010, 15:43
у меня возникла немного другая проблема - после увеличения изображения, начинаем уменьшать его. И качество изображения резко падает, так как умножаем наш коэффициент на текущее изображение. А само изображение уже к этому моменту было увеличено. Что делать?
я делал так, применял коэффициент к исходному изображению. но исходное изображение нужно где-то хранить и загружать каждый раз. Поэтому приложение очень тормозило. Может у кого то есть идея, как это исправить?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.10.2010, 17:15
Хранить в памяти исходное изображение, а выводить новое изображение с нужным коэффициентом приближения\удаления.
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
27.10.2010, 17:41
я так и делаю...
раньше хранил изображение на жестком диске, потом решил хранить в ОЗУ. Но...
хоть и в случае и ОЗУ изображение загружается быстрее, но все равно очень долго.
Например изображение с разрешением 2488 на 3509 при увеличении долго грузится. Но, это еще не все. Мы то фактически при увеличении увеличиваем это разрешение, домножая на коэффициент. Соответственно и быстродействие падает. Как быть в это случае?

а, и еще, может кто то знает, какое максимальное значение для разрешения? опять таки это изображение увеличиваю ток на 20% и эксепшн - недопустимый параметр (как раз в том месте где задаем новые размеры для изображения). Какие могут быть идеи?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.10.2010, 17:50
Цитата Сообщение от patriot2008 Посмотреть сообщение
Как быть в это случае?
Искать какие либо алгоритмы, либо работать с изображением напрямую в памяти (я увеличением\уменьшением в памяти не занимался)

Либо делать обработку в отдельном потоке.
Цитата Сообщение от patriot2008 Посмотреть сообщение
какое максимальное значение для разрешения?
Зависит от памяти + от того как загружается\отображается изображение.
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
27.10.2010, 17:52
та вот все ищу, и ничего толкового найти не могу... ((
если у кого нить есть норм алгоритмы или примеры кода, то подскажите плз...
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.10.2010, 23:07
patriot2008, тебе картинку нужно учвеличивать для удобства просмотра или для того, что бы она физически имела больший размер и занимала больше места на диске?
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
27.10.2010, 23:18
для удобства, но так, чтобы с этой картинкой и далее можно было работать (например, на ней линии рисовать).
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.10.2010, 23:27
patriot2008, для удобства просмотра вообще размер картинки менять не нужно, посмотри мой первый пост в этой теме (17.04.2010, 11:50)
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
27.10.2010, 23:45
я похожие действия делаю, но после этого создаю новое изображение (увеличенное в размере) и сохраняю еще в MemoryStream полученное изображение. может можно как нить по другому?

Добавлено через 3 минуты
может можно работать с этим изображением когда оно просто увеличено для удобства, а не его размер?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.10.2010, 23:51
порядок такой:
1 кидаешь на форму панель
2 выставляешь свойство panel.AutoScroll=true;
3 кидаешь на панель pictureBox
4 pictureBox.SizeMode=Zoom
5 pictureBox.Size=pictureBox.Image.Size;
6 При необходимости меняешь размер pictureBox.Size, физический размер картинки при этом остается неизменным

Ненужны никакие потоки, и резервные копии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2010, 23:51
Помогаю со студенческими работами здесь

Увеличение картинки при клике
ПРивет есть прога с картинкой....но очень маленькой картинкой. Нужно чтобы при нажатии на картинку она увеличивалась! использую...

Увеличение картинки с помощью мыши
Есть pictureBox1 как сделать так чтоб взять мышкой за его ребро и тащить в бок и чтоб он увеличивался/уменьшался?

Перемещение (увеличение / уменьшение) картинки по панели
Я думаю из заголовка все понятно, собственно как это реализовать?

Изменение размера картинки (увеличение, уменьшение) - остаются белые полосы по краям
Доброго времени суток! Есть проект, необходимо открыть картинку, сделать ресайз и сохранить под другими именем. Всё это сделал, но...

Вращение картинки относительно точки, без изменения картинки
Нужно сделать так ,чтобы картинка вращалась за счёт заданного угла ,без искажения public partial class Form1 : Form { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru