Киберфак – бесплатно скачать презентации PowerPoint, лекции, рефераты, шпоры, курсовые cyberfac logo
cyberfac.ru
На главную | Регистрация | Вход
  Статьи  
Главная » Статьи » Информатика » Высокоуровневые методы информатики и программирования

Хранение графических образов (Borland C++ Builder/Delphi)

Полезная статья? Пожалуйста, поставьте "+"
К содержанию

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

В системах BCB и Delphi существует более десятка компонент и графических объектов, используемых для визуализации различных изображений, создаваемых программным путем или отображающих содержимое некоторых графических файлов. Их всех роднит свойство Canvas, которое собственно и обеспечивает компоненты поверхностью (канвой), способной хранить графические образы.

С целью экономии ресурсов под канву большинства видимых графических объектов временно выделяется соответствующий участок видеопамяти. Поэтому такие объекты иногда называют экранными, и созданное на их поверхности изображение остается видимым до тех пор, пока содержащее их окно не будет свернуто или перекрыто другим окном. Чтобы изображение появилось вновь, программист должен предусмотреть индивидуальные средства восстановления рисунка в обработчике события OnPaint. Экранные объекты оперативно отражают результат каждой графической процедуры, выполненной на их канве.

В отличие от сугубо экранных объектов существуют графические компоненты, канва которых продублирована соответствующим участком оперативной памяти. Одним из таких объектов является компонент типа TImage. Изображения, создаваемые на их поверхности, сохраняются до тех пор, пока соответствующий объект не будет уничтожен. Единственное неудобство объекта типа TImage заключается в том, что содержимое его канвы продолжает оставаться невидимым до тех пор, пока процесс построения соответствующего графического образа не будет завершен. Зато графические изображения, выполненные на поверхности компонент TImage, автоматически восстанавливаются при обновлении свернутой или частично перекрытой формы.

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


Объекты типа TBitmap.
Графические объекты типа TBitmap (bitmap — битовая карта) предназначены для хранения прямоугольных растровых изображений и манипуляций над ними. Они создаются и уничтожаются в процессе работы программы. Процессы объявления и создания объекта можно совместить:

Graphics::TBitmap *pBMP = new Graphics::TBitmap(); //BCB
pBMP:TBitmap; {Delphi}
...............
pBMP:=TBitmap.Create;


Здесь pBMP — указатель на создаваемый объект. Для объекта, на котором мы собираемся рисовать, необходимо установить ширину (pBMP®Width/pBMP.Width) и высоту (pBMP®Height/pBMP.Height) прямоугольной области. Если в объект предполагается загрузить другое изображение, то ресурсы для его хранения система выделит сама. Значение свойства pBMP®Empty=true свидетельствует о том, что объект пуст.

Для уничтожения объекта используется процедура delete (BCB)и free (Delphi):

delete pBMP; //BCB
pBMP.Free; {Delphi}


Основная информация об изображении, хранящемся в объекте типа TBitmap, представлена двумерным массивом pBMP®Canvas®Pixels[x][y] , значениями элементов которого являются коды цветности пикселов. Они формируются в процессе построения графических фигур или манипуляций над ними с помощью методов канвы, при загрузке изображения из графического файла (метод LoadFromFile) или из буфера обмена (методы Assign и LoadFromClipboardFormat). Для монохромного изображения (свойство pBMP®Monochrome=true) в массиве Pixels отводится 1 бит на пиксел (свойство pBMP®PixelFormat=pf1bit). В зависимости от установленной палитры на каждый пиксел выделяется 4, 8, 15, 16, 24 или 32 бита. Таким образом, цветное изображение большого размера в формате truecolor занимает в оперативной памяти достаточно много места.

Объекты типа TBitmap могут участвовать в операторах присвоения или быть операндами метода Assign:

Bitmap1=Bitmap2;
Bitmap1®Assign(Bitmap2);


Приведенные выше два действия не являются эквивалентными в полном смысле слова. Обычный оператор присваивания в отличие от процедуры Assign не создает копию объекта Bitmap2, а всего лишь присваивает указателю Bitmap1 значение адреса Bitmap2.

Среди наиболее распространенных операций над объектами типа TBitmap — копирование их содержимого в дисковый файл с расширением .bmp (метод SaveToFile) и считывание растрового изображения из дискового файла (метод LoadFromFile):

pBMP®LoadFromFile(«имя bmp-файла»);
pBMP®SaveToFile(«имя bmp-файла»);

Объекты типа TIcon.
Графические объекты типа TIcon представляют собой небольшие цветные или полутоновые изображения, как правило, размером 32х32 пиксела. Обычно они используются как графические индикаторы свернутых приложений, но могут выступать и в роли пояснительных миниатюр на поверхности каких-либо компонент. Дисковые файлы хранят такие изображения в формате .ico.
Объекты типа TMetafile.

Графические файлы Microsoft Metafile поначалу были задуманы как внутренний векторный формат операционных систем Windows. В ранних версиях использовались файлы с расширением .wmf (Windows 3.1 MetaFile). Новые операционные системы используют более современный формат Win32 Enhanced Metafile (расширение .emf). Формат Metafile оказался настолько удачным, что в последние годы используется как стандарт для обмена графической информацией в компьютерных сетях. Помимо стандартной шапки файлы типа Metafile состоят из записей переменной длины — упакованных команд обращения к графическим процедурам GDI. В первом слове такой записи хранится ее длина. Во втором слове — порядковый номер функции GDI. В последующих словах в машинном формате заданы аргументы функции. Распаковка и интерпретация этой информации связана с дополнительными затратами машинного времени, однако масштабирование и повороты векторных изображений выполняются без искажений. С помощью методов канвы содержимое метафайлов может быть превращено в растровое изображение на видимых компонентах или формах. Обратная операция по преобразованию растрового изображения в векторное стандартными средствами C++ Builder не поддерживается. Это — довольно трудная задача, относящаяся к теории распознавания образов.

Объекты типа TMetafile обладают рядом специфических свойств. Во-первых, помимо описания собственно графического изображения в файл можно включить текстовый комментарий (свойство Description) и указать его создателей (свойство CreatedBy). Для повышения точности воспроизведения кроме обычных параметров типа Width и Height, задающих ширину и высоту в пикселах, здесь присутствуют аналогичные характеристики в сотых долях миллиметра (свойства MMWidth и MMHeight). Еще одно свойство Inch определяет количество шагов в дюйме. Если в качестве единицы длины в метафайле были использованы твипсы, то Inch=1440. Эти параметры более уместны при воспроизведении графических объектов на прецизионных плоттерах.

Свойство Transparent=true обеспечивает воспроизведение рисунка с прозрачным фоном. Под таким рисунком просвечивает фон принимающего объекта с ранее созданным изображением.

Объекты типа TPicture.
Объекты типа TPicture выступают в роли универсальных графических контейнеров, в которые можно загружать растровые изображения в форматах .bmp и .ico или векторные изображения — метафайлы. Таким образом один объект типа TPicture может выступать в программе и как TBitmap, и как Ticon, и как TMetafile. Для создания объекта типа TPicture используют оператор new:

TPicture *pic1=new TPicture;

В созданный таким образом объект мы можем загрузить графический файл любого формата:

pic1®LoadFromFile("c:\\windows\\teach.ico");
pic1®LoadFromFile("c:\\windows\\ОБЛАКА.bmp");
pic1®LoadFromFile("c:\\windows\\system\\spbanner.wmf");


Для отображения загруженной картинки в левом верхнем углу формы можно воспользоваться методом Draw, указав в качестве его третьего аргумента обобщенное имя графического объекта:

Canvas®Draw(0,0,pic1®Graphic);

Независимо от типа загруженного изображения программа копирования разберется с графическим форматом рисунка и правильно воспроизведет его. Однако, загрузку и отображение растрового рисунка в формате .bmp, например, можно выполнить и по-другому, воспользовавшись свойством Bitmap:

pic1->Bitmap->LoadFromFile("c:\\windows\\ОБЛАКА.bmp");
Canvas->Draw(0,0,pic1->Bitmap);


Для других графических файлов пригодятся имена типа pic1->Icon или pic1->Metafile. Попытка загрузить файл неподобающего формата по такому конкретному имени приведет к аварийной ситуации.

Объекты типа TPicture могут использоваться в процедурах копирования Draw и StretchDraw или участвовать в обменах с Clipboard.
Объект типа Clipboard.

Буфер обмена (Clipboard) представляет собой универсальное временное хранилище, способное принимать и выдавать текстовые документы, графические изображения в разных форматах и даже компоненты. Для работы с буфером обмена вы должны подключить к своему модулю заголовочный файл Clipbrd.hpp:

#include <vcl\Clipbrd.hpp>

Как правило, для записи в буфер обмена описаний графических объектов и извлечения их оттуда используется метод Assign:

Bitmap1->Assign(Clipboard()); //Запись в буфер обмена
Clipboard()->Assign(Bitmap1); //Извлечение из буфера обмена


Чтобы не создавать аварийную ситуацию, перед чтением из буфера обмена следует убедиться в том, что находящееся там изображение имеет нужный формат:

if (Clipboard()->HasFormat(CF_xxx)...

Аргумент CF_xxx может принимать одно из следующих значений — CF_TEXT, CF_BITMAP, CF_METAFILEPICT, CF_PICTURE или CF_OBJECT. Функция HasFormat принимает значение true, если содержимое буфера имеет формат, соответствующий аргументу.


Категория: Высокоуровневые методы информатики и программирования | Добавил: Ni-Cd (01 Декабря 2011)
Просмотров: 2347 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
  Полезные материалы  

В нашем каталоге файлов можно найти много полезной информации. Также советуем заглянуть в каталог статей: в нем есть полезные статьи по темам: Экономика предприятия, Общая экономика, Финансы и Кредит, также Словарь терминов по экономике, Маркетинг, Бухучет и Мировая экономика
Также есть полезная страница Факультеты МИФИ, которая расскажет о том, какие есть в МИФИ факультеты.
Меню
 

Навигация
Высокоуровневые методы информатики и программирования [28]
Информатика и программирование [34]
Информационные системы в экономике [36]
Языки программирования и методы трансляции [15]
Алгоритмизация и программирование [61]
 

Поиск
 

Онлайн
Онлайн всего: 1
Гостей: 1
Пользователей: 0
 

Статистика


Рейтинг@Mail.ru

 


2007 - 2024 © Ni-Cd. All Rights Reserved