Как вставить картинку в делфи
Февраль 21st, 2013
admin
if(OpenPictureDialogl.Execute) then
Imagel.Picture.Bitmap.LoadFromFile(OpenPictureDialogl.FileName);
Imagel.Picture.Icon.LoadFromFile(OpenPictureDialogl.FileName);
Imagel.Picture.Graphic.LoadFromFile(OpenPictureDialogl.FileName);
if SavePictureDialogl.Execute then
Imagel.Picture.Graphic.SaveToFile(SavePictureDialogl.FileName);
Clipboard.Assign(Imagel.Picture);
Imagel.Picture.Assign(Clipboard);
| Событие | Описание |
| OnProgress | События происходят при медленных процессах изменения графического изображения и позволяют построить индикатор хода процесса. |
Опубликовано в рубрике Delphi
21.4. Работа с изображениями
Класс TCanvas, который является основой графической системы Delphi, не содержит методов сохранения отрисованных изображений. Методы сохранения картинок имеют классы: TPicture, TGraphic и TBitMap. Поэтому
сохранение изображений из класса TCanvas можно осуществлять, используя один из указанных выше классов. Приведем пример сохранения картинки из класса TCanvas объекта PaintBox1 в файл с помощью методов класса TBitMap: Var Bm:TBitMap; // Определяем указатель на растровую картинку
R:TRec; // Выделяем память под прямоугольник
Bm:=TBitMap.Create; // Выделяем память под растровую картинку R:=PaintBox1. ClientRect; // Запоминаем размеры картинки
Bm.Width:=R.Right-R.Left+1; // Передаем эти размеры объекту Bm
Bm.Height:=R.Bottom-R.Left+1; Bm.Canvas.CopyRect(R,PaintBox1.Canvas,R); // Копируем картинку в Bm Bm.SaveToFile(’c:\my\pic1.bmp’); // Сохраняем картинку в файле
Bm.Free; // Освобождаем память выделенную объекту Bm
Операционная система Windows поддерживает только растровые картинки и файлы с расширением *.bmp. В этих файлах первые 14 байт определяют заголовок файла, следующие 40 байт – заголовок картинки (ширина, высота, разрешение по координатам для печати картинки, число цветовых плоскостей, число цветов в палитре, метод сжатия и т.д.).
Затем идет цветовая палитра, где каждый цвет имеет свой номер и занимает в палитре 4 байта. Далее идет само растровое изображение – построчное перечисление номеров цветов для каждого пикселя (точки на экране), причем строки растра идут снизу вверх и длина каждой строки кратна 4 байтам.
Система Delphi позволяет работать и с картинками в формате JPEG (расширения файлов *.jpg). Для этого в Delphi используется специальный модуль Jpeg. В этом формате вся картинка сначала разбивается на квадратики 8*8 или 16*16 пикселей. Исходная растровая картинка каждого квадратика преобразуется, как в телевидении, в яркостную и две цветоразностные плоскости. Каждая из плоскостей подвергается дискретному, двухмерному, быстрому преобразованию Фурье. В результате этого преобразования получаются матрицы коэффициентов Фурье. В этих матрицах отбрасываются высшие составляющие коэффициентов Фурье. Оставшиеся коэффициенты матриц затем сжимаются по методу Хаффмана Число этих коэффициентов определяется параметром качества изображения. Этот формат позволяет сжимать растровые изображения в 5–20 раз в зависимости от структуры картинки, и он используется в основном для хранения фотографий людей, природы и т.д. Он также стал основой для цифрового телевидения и является основой формата MJPEG. Следует помнить, что этот формат хранит картинки с частичной потерей информации, которую человеческий глаз почти не замечает. В нем не следует хранить, например, графики функций, изображения с резким переходом яркости или цветности, так как вокруг линий будет появляться вуаль в виде отдельных точек, что становится уже заметным нашему глазу.
Приведем пример вывода в компонент Image1 картинки из файла с расширением *.jpg. В обработчике любого события можно записать:
Var AJpeg:TJpegImage; // Определяем указатель на картинку
AJpeg:=TJpegImage.Create; // Выделяем память под картинку AJpeg.LoadFromFile(’C:\my\pic1.jpg’); // Читаем файл Image1.Picture:=TPicture(AJpeg); // Отображаем картинку
AJpeg.Free; // Освобождаем память из–под картинки
Рассмотрим теперь пример чтения картинки из базы данных. Пусть, например, в таблице ADOTable1 есть поле Pic, в котором хранятся картинки в формате JPEG. Тогда в обработчике какого–то события можно написать.
Var AJpeg:TJpegImage; // Определяем указатель на картинку ABlobStream:TBlobStream; // Определяем указатель на поток байт
ABlobStream:=TBlobStream.Create(ADOTable1.FieldByName (‘Pic’) as TBlobField, bmWrite); // Связываем поле таблицы с потоком
// Выделяем память под картинку
Imag1.Picture:=TPicture(AJpeg); // Отображаем картинку
// Освобождаем память из–под картинки
Отметим так же, что в Delphi можно работать и с картинками в формате GIF, в котором картинки хранятся в сжатом виде с использованием стандартного алгоритма LZW (Лемпела–Зива–Воотча). Этот алгоритм в процессе сжатия информации создает словарь слов и запоминает не сами слова, а их коды, которые занимают памяти существенно меньше, чем слова из словаря. Все современные архиваторы данных (ARJ, ZIP, RAR и др.) используют именно этот алгоритм сжатия информации, причем процесс сжатия идет без потери информации, как это наблюдается в картинках JPEG . Этот алгоритм может сжимать изображения в 2–5 раз. Формат GIF позволяет хранить сразу несколько картинок и чередовать их появление на экране, создавая подобие мультфильма. Этот формат картинок широко используется на страничках Интернета, в нем лучше всего хранить графики функций и контрастные изображения. Он официально не поддерживается в Delphi, но есть бесплатно рассылаемая библиотека компонентов RxLib, в которой есть поддержка такого формата картинок.
22. ВИЗУАЛЬНЫЕ КОМПОНЕНТЫ DELPHI
Рассмотрим некоторые, интересные с точки зрения использования, визуальные компоненты Delphi. Вся визуальная библиотека компонентов (VCL) Delphi содержит около 450 компонентов. К ним может быть добавлено неограниченное число компонентов, созданных различными компаниями и отдельными программистами. Delphi – открытая система для подключения любых нестандартных компонентов. Следует иметь в виду, что основная масса дополнительных компонентов поставляется в двоичном формате в файлах с расширением *.dcu, формат которого изменяется от одной к другой версий
Delphi. Поэтому, приобретая какой–либо дополнительный компонент для одной версии Delphi, нет никакой уверенности, что он будет работать с более новой версией Delphi.
Рассмотрим возможности некоторых компонентов, которые будут использованы при выполнении лабораторных работ по программировагнию.
22.1. Компонент TBitBtn
Этот компонент определяет кнопку с рисунком. Основные его свойства:
• Property Caption:Tcaption; – надпись на кнопке;
• Property Kind:TBitBtnKind; – вид кнопки. При значении этого свойства BkCustom вид кнопки определяется пользователем. Вид кнопок для других значений этого параметра приведен на рис.22.1;
Рис.22.1. Виды стандартных кнопок
• Property Glyph:TBitMap; – растровое изображение картинок на кнопке;
• Property NumGlyphs:TNumGlyphs; – количество картинок в растре;
• Property LayOut:TButtonLayOut; – определяет край кнопки к которому прижимается рисунок;
• Property Margin:Integer; – определяет расстояние от края кнопки до рисунка в пикселях;
• Property Spacing:Integer; – определяет расстояние от края рисунка до надписи на нем в пикселях.
Кнопки могут находиться в одном из следующих состояний: 1) обычное или нормальное, 2) кнопка не доступна, 3) кнопка нажата,
4) кнопка утоплена (это только для кнопок TSpeedButton).
Для каждого из этих состояний можно предусмотреть свою картинку на
кнопке. Для этого в графическом редакторе нужно создать растровую картинку с несколькими изображениями состояний кнопки. Ниже приведен пример картинки для трех состояний кнопки «Старт». Сама картинка на кнопке будет размером 32 на 32 пикселя, но объединенная картинка для трех состояний будет иметь ширину 96 пикселей:
Image в Delphi
Февраль 21st, 2013
admin
Дает отображение графического изображения и обеспечивает работу с изображением
Страница библиотеки Additional
Класс TImage
Иерархия TObiect — TPersistent — TComponent — TControl — TGraphic-Control
Модуль extctrls
Описание
Компонент Image дает отображение на форме графического изображения. Свойство Picture типа TPicture содержит отображаемую графическую составляющюю у которой тип — битовая матрица, пиктограммы, метафайла или определенного пользователем типа. Свойство Canvas позволяет создавать и редактировать изображения.
Во время проектирования загрузить в свойство Picture графический файл можно щелкнув на кнопке с многоточием около свойства Picture в окне Инспектора Объектов или при нажатии дважды на Image. Должно открыться окно Picture Editor, которое позволит загрузить в свойство Picture некоторый графический файл (через кнопку Load), и сохранить открытый файл, дав ему новое имя или сохранить в новом каталоге.
Когда вы в процессе создания проекта сделали загрузку изображения из файла в компонент Image, он не просто отобразит его, но и сохранит загруженное изображение в приложении. Приемущества составляет в том, что ваш проект в целом будет поставляться без отдельного графического файла.
При установке свойства AutoSize равному true, то размер компонента Image будет автоматом подогнан под размер помещенной в image картинки. Если свойство AutoSize установлено в значение false, то изображение может и не уместиться в компонент или же, наоборот, площадь компонента возможно окажется намного больше площади изображения.
Другое свойство — Stretch позволяет реализовать подгонку не компонента под размер рисунка, а сам рисунок под параметр компонента. Но поскольку вряд ли реально в действительности установить размеры Image очень точно пропорциональными величине рисунка, то изображение будет искажено. При установке Stretch равное true может иметь смысл только для каких-то узоров, но не для картинок. Свойство Stretch не действует на изображения пиктограмм, которые не меняют своих размеров.
Свойство — Center, которое установленно в true, делает по центру изображение на площади Image, если параметры размера компонента больше параметра размеров рисунка.
Свойство — Transparent — прозрачность. Если значение Transparent равно true, то изображение в Image будет прозрачным. Это используется при наложения изображений друг на друга. Следует помнить, что свойство Transparent распространяется только на битовые матрицы. При этом прозрачным (т.е. заменяемым на цвет расположенного под ним изображения) делается по умолчанию цвет левого нижнего пиксела битовой матрицы.
Свойство Picture позволяет легко организовать обмен с графическими файлами любых типов в процессе выполнения приложения. Это свойство — объект, который имеет в свою очередь подсвойства, которые указывают на хранящийся графический объект. Если в Picture хранится битовая матрица, на нее указывает свойство Picture.Bitmap. Если хранится пиктограмма, на нее указывает свойство Picture.Icon. На хранящийся метафайл указывает свойство Picture.Metafile. Наконец, на графический объект произвольного типа указывает свойство Picture.Graphic.
Объект Picture и его свойства Bitmap, Icon, Metafile и Graphic имеют методы файлового чтения и записи LoadFromFile и SaveToFile. Для свойств Picture.Bitmap, Picture.Icon и Picture.Metafile формат файла должен соответствовать классу объекта: битовой матрице, пиктограмме, метафайлу. При чтении файла в свойство Picture.Graphic файл должен иметь формат метафайла. А для самого объекта Picture методы чтения и записи автоматически подстраиваются под тип файла.
Например, если вы имеете в приложении компонент-диалог OpenPicture-Dialog, то загрузка в Image выбираемого пользователем графического фала может быть организована оператором
if(OpenPictureDialogl.Execute) then
Загружаемый этим оператором файл может быть любого типа: битовая матрица, пиктограмма или метафайл. Если будут открываться только файлы битовых матриц, то оператор загрузки файла можно заменить на
Imagel.Picture.Bitmap.LoadFromFile(OpenPictureDialogl.FileName);
Для пиктограмм можно было бы использовать оператор
Imagel.Picture.Icon.LoadFromFile(OpenPictureDialogl.FileName);
а для метафайлов — оператор
Imagel.Picture.Graphic.LoadFromFile(OpenPictureDialogl.FileName);
Но во всех этих случаях, если формат файла не совпадет с предполагаемым, возникнет ошибка.
Аналогично работает и метод SaveToFile с тем отличием, что примененный к Picture или к Picture.Graphic он сохраняет в файле изображение любого формата. Например, если вы дополните свое приложение диалогом SavePic-tureDialog, то сохранение изображения в файле можно организовать оператором
if SavePictureDialogl.Execute then
В этом случае пользователь получит возможность сохранить изображение любого формата в файле с новым именем. Только при этом, чтобы не возникало в дальнейшем путаницы, расширение сохраняемого файла все-таки должно соответствовать формату сохраняемого изображения.
Абсолютно идентично для изображений любого формата будет работать программа, если оператор сохранения вы замените на
Imagel.Picture.Graphic.SaveToFile(SavePictureDialogl.FileName);
использующий свойство Picture.Graphic. А если вам известен формат хранимого в компоненте Image изображения, то вы можете применить метод SaveToFile к свойствам Picture.Bitmap, Picture.Icon, и Picture.Metafile.
Для всех рассмотренных объектов Picture, Picture.Bitmap, Picture.Icon, и Picture.Metafile определяют методы присваивания значений объектов Assign.
Однако для BitMap, Icon и Metafile присваивать можно только значения однородных объектов: соответственно битовых матриц, пиктограмм, метафайлов.
При попытке присвоения значениям разнородных объектов будет генерироваться исключение EConvertError. Объект Picture — является универсальным, ему можно присвоить значения объектов любых из остальных трех классов. А значение Picture можно присвоить только тому объекту, тип которого совпадет с типом объекта, хранящегося в нем.
Метод Assign можно использовать и для обмена изображениями с буфером Clipboard.
Например, оператор
Clipboard.Assign(Imagel.Picture);
занесет в буфер обмена изображение, хранящееся в Imagel. Аналогично оператор
Imagel.Picture.Assign(Clipboard);
прочитает в Imagel изображение, находящееся в буфере обмена. Причем это может быть любое изображение, и даже текст.
Надо только не забыть при работе с буфером обмена вставить в оператор uses вашего модуля ссылку на модуль
Clipbrd. Автоматически Delphi эту ссылку не вставляет.
Благодаря наличию канвы Canvas компонент Image широко используется не только для хранения готовых изображений, но и для построения различных графических редакторов.
Основные свойства
Основные методы
Никаких специальных методов в компоненте не объявлено. Компонет наследует множество методы от базового класса TControl .
| Событие | Описание |
| OnProgress | События происходят при медленных процессах изменения графического изображения и позволяют построить индикатор хода процесса. |
Остальные события наследуются от класса TControl
. delphi image metafile создать tbitmap делфи свойства задание прозрачности обекту в delphi timagen delphi image delphi
Опубликовано в рубрике Delphi
Как вставить картинку в делфи
Графические возможности Delphi. Image.
Этот компонент служит для размещения на форме одного из трех поддерживаемых Delphi типов изображений: растровой картинки, пиктограммы или метафайла. Любой из этих типов изображения содержится в центральном свойстве компонента — picture. В свойстве canvas содержится канва, с помощью которой при необходимости программа может отредактировать растровое изображение (но не пиктограмму или метафайл!).
property Center: Boolean;
Указывает, надо ли центрировать изображение в границах компонента. Игнорируется, если Autosize=True или если Stretch =True и изображение не является пиктограммой (ICO)
property Canvas : TCanvas;
Содержит канву для прорисовки изображения
property Transparent: Boolean;
Запрещает/разрешает накладывать собственный фон изображения на фон компонента
property Proportional: Boolean; property Stretch: Boolean;
Разрешает/запрещает изменять размер изображения так, чтобы оно целиком заполнило клиентскую область компонента.
property Picture: TPicture;
Разрешает/запрещает пропорционально уменьшать высоту и ширину изображения, если оно не может целиком уместиться в рабочей зоне компонента
property IncrementalDisplay: Boolean;
Разрешает/запрещает показ большого изображения по мере его загрузки Центральное свойство класса. Служит контейнером изображения
Никаких специальных методов у Image нет.
Иллюстрацию, которая будет выведена в поле компонента image, можно задать как во время разработки формы приложения, так и во время работы программы.
Во время разработки формы иллюстрация задается установкой значения свойства picture путем выбора файла иллюстрации в стандартном диалоговом окне, которое появляется в результате щелчка на командной кнопке Load окна Picture Editor . Чтобы запустить Image Editor, нужно в окне Object Inspector выбрать свойство Picture и щелкнуть на кнопке с тремя точками.
Если размер иллюстрации больше размера компонента, то свойству strech нужно присвоить значение True и установить значения свойств width и Height пропорционально реальным размерам иллюстрации.
Чтобы вывести иллюстрацию в поле компонента image во время работы программы, нужно применить метод LoadFromFile к свойству Picture, указав в качестве параметра имя файла иллюстрации. Например, инструкция
загружает иллюстрацию из файла bart.bmp и выводит ее в поле вывода иллюстрации (imagel).
Метод LoadFromFile позволяет отображать иллюстрации различных графических форматов: BMP, WMF, JPEG (файлы с расширением jpg).
Написать программу-фотоальбом, которая позволяет просматривать фотографии и оставлять к ним записи.
Замечание . Для работоспособности программы необходимо создать в папке программы текстовый файл comment. txt и сменить ему расширение на .dat ( comment . dat ); также необходимо разместить 10 графических файлов с расширением .bmp и имеющих имена от 1 до 10.
Данная программа представляет собой прототип программы-фотоальбома. Она представлена для ознакомления принципа использования Image.