русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Оптимальный подбор размеров элемента PictureBox


Дата добавления: 2013-12-23; просмотров: 2249; Нарушение авторских прав


Если в качестве значения свойства SizeMode элемента управления PictureBox выбрать значение StretchImage, а размеры элемента PictureBox не пропорциональны размерам загружаемого изображения, то изображение по ширине или высоте может исказиться. Особенно это заметно при динамической смене изображения. В этом случае лучше расположить изображение по центру (установить свойство SizeMode, равное CenterImage), а размеры PictureBox изменять динамически. В случае, когда изображение полностью помещается в элементе управления, ничего не происходит. Если же размеры изображения превышают размеры элемента управления, то можно изменять размеры элемента программно. Для этого необходимо написать специальную программу, например:

Visual Basic .Net:

Private Sub ResizeImage()

PictureBox1.Width = 594

PictureBox1.Height = 360

If PictureBox1.Image.Width < PictureBox1.Width And PictureBox1.Image.Height < PictureBox1.Height Then

PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

Else

Dim k AsSingle

If PictureBox1.Image.Width > PictureBox1.Image.Height Then

k = PictureBox1.Image.Width / PictureBox1.Image.Height

PictureBox1.Height = PictureBox1.Width / k

Else

k = PictureBox1.Image.Height / PictureBox1.Image.Width

PictureBox1.Width = PictureBox1.Height / k

End If

End If

End Sub

Visual C#:

Private void resizeimage()

{

pictureBox1.Width = 594;

pictureBox1.Height = 360;

if (pictureBox1.Image.Width < pictureBox1.Width & pictureBox1.Image.Height < pictureBox1.Height) pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

else

{

Single k;

k = 1;

int k1 = (int) k;

if (pictureBox1.Image.Width > pictureBox1.Image.Height)

{

k1 = pictureBox1.Image.Width / pictureBox1.Image.Height;

pictureBox1.Height = pictureBox1.Width / k1;



}

else

{

k1 = pictureBox1.Image.Height / pictureBox1.Image.Width;

pictureBox1.Width = pictureBox1.Height / k1;

}

}

}

 

В этой программе в случае, когда один из размеров изображения превысит соответствующий размер элемента управления, размер элемента управления будет изменён в соответствии с пропорциями изображения. Данную программу необходимо вызывать из процедуры загрузки изображения, например, при динамической смене изображения из обработчика события Timer1_Tick.

Логика данных процедур на разных языках несколько различается. Это связано с тем, что в C# невозможно явное преобразование типов Floatи Singleв Int, а размеры изображения в пикселях как раз имеют тип Int. Поэтому на C# вводится вспомогательная переменная k, которая по умолчанию принимает значение 1, что означает исходное соотношение размеров. Коэффициент преобразования же обозначен как k1, который имеет тип Int, но с помощью переменной kприводится к типу Single.

 

Работа с буфером обмена

Изображения, содержащиеся в элементе PictureBox, можно копировать в буфер обмена для последующего обмена с другими приложениями. В данный элемент также можно вставлять изображения из буфера обмена. Для этого используется специальный объект ClipBoard. Данный объект не требуется наносить на форму, он обрабатывается только программно.

Для копирования изображения в буфер обмена используется метод SetDataObject. Например, для копирования в буфер обмена изображения, размещённого на элементе PictureBox1, необходимо написать код:

Visual Basic .Net:

Clipboard.SetDataObject(PictureBox1.Image)

Visual C#:

Clipboard.SetDataObject(pictureBox1.Image);

 

Этот код может быть помещён, например, в обработчик события Click пункта контекстного меню «Копировать», которое предварительно должно быть создано и привязано к элементу PictureBox1.

Метод SetDataObject может иметь два аргумента. Второй, необязательный, аргумент, представляющий собой логическое выражение, определяет, должно ли помещённое в буфер обмена значение остаться там после завершения работы приложения, которое его туда поместило, например:

Visual Basic .Net:

Clipboard.SetDataObject(PictureBox1.Image,False)

Visual C#:

Clipboard.SetDataObject(pictureBox1.Image,false);

 

Для копирования изображения из буфера обмена используется метод GetDataObject. Он возвращает объект IDataObject, у которого имеются три метода:

GetData – считывает содержимое буфера обмена;

GetDataPresent – возвращает логическое значение True, если в буфере обмена содержатся данные указанного типа;

GetFormat – возвращает перечень форматов, поддерживаемых буфером обмена.

Последние два метода необходимы, т.к. в запросе на чтение данных из буфера обмена обязательно нужно указать, какие именно данные необходимо получить. Если там содержатся данные другого типа, необходимо выдать соответствующее сообщение. Например, для чтения из буфера обмена изображения и размещения его на элементе управления PictureBox1 необходимо записать код:

Visual Basic .Net:

PictureBox1.Image = Clipboard.GetDataObject.GetData(DataFormats.Bitmap)

Visual C#:

IDataObject idata = Clipboard.GetDataObject();

pictureBox1.Image = (Bitmap)idata.GetData(DataFormats.Bitmap);

 

Перечисление DataFormats содержит константы, представляющие все поддерживаемые буфером обмена форматы – Text,HTML и др. Графическим данным соответствует формат Bitmap. Для проверки данного формата необходимо проверить, вернёт ли следующий код значение True:

Visual Basic .Net:

Clipboard.GetDataObject.GetDataPresent(DataFormats.Bitmap)

Visual C#:

IDataObject idata = Clipboard.GetDataObject();

idata.GetDataPresent(DataFormats.Bitmap);

 

Пример.Вставить изображение из буфера обмена в элемент управления PictureBox1. Данный код может быть записан, например, в обработчике события Click пункта «Вставить», контекстного меню, которое предварительно должно быть создано и привязано к элементу управления PictureBox:

Visual Basic .Net:

If Clipboard.GetDataObject.GetDataPresent(DataFormats.Bitmap) Then

PictureBox1.Image = Clipboard.GetDataObject.GetData(DataFormats.Bitmap)

Else

MsgBox("В буфере обмена не содержится изображений", MsgBoxStyle.OkOnly)

EndIf

Visual C#:

IDataObject idata = Clipboard.GetDataObject();

if (idata.GetDataPresent(DataFormats.Bitmap)) pictureBox1.Image = (Bitmap)idata.GetData(DataFormats.Bitmap);

else MessageBox.Show("В буфере обмена не содержится изображений", "Ошибка", MessageBoxButtons.OK);

 



<== предыдущая лекция | следующая лекция ==>
Создание анимации в формах Windows | Базовые графические объекты


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.