Графическое построение объектов в среде Delphi

Автор: Пользователь скрыл имя, 04 Ноября 2011 в 14:53, реферат

Описание работы

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

Работа содержит 1 файл

Реферат по ПРЗ.docx

— 184.65 Кб (Скачать)

Государственное образовательное  учреждение высшего  профессионального  образования

  «ЧЕЛЯБИНСКИЙ ГОСУДАРСТВЕННЫЙ  ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра информатики и методики преподавания информатики 
 
 
 
 

Контрольная работа по дисциплине

«Практикум  решения задач»

Реферат на тему:

«Графическое построение объектов в среде Delphi». 
 
 

Выполнил: студент ОЗО 4 курса

ФМО профиль «Информатики»

Бабанова  И.И. 
 
 
 
 

2011

Графические объекты в системе Delphi 

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

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

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

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

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

    Объекты типа TBitmap.

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

pBMP:TBitmap;

pBMP:=TBitmap.Create;

    Здесь pBMP — указатель на создаваемый объект.

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

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

pBMP.Free;

    Основная  информация об изображении, хранящемся в объекте типа 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, если содержимое буфера имеет формат, соответствующий аргументу.

    Экранные  и внеэкранные графические объекты.

    Разместим на форме три объекта размером 100х100 пикселов, располагающие свойством Canvas — Image1 с началом в точке (120,0), PaintBox1 с началом в точке (240,0) и StatusBar1 с началом в точке (360,0). Компонент типа TStatusBar (строка состояния), на котором обычно никто не рисует, выбран специально для демонстрации универсальности свойства Canvas. В процедуре создания формы заведем объект типа TBitmap, указатель на который назовем Fbmp:

    void __fastcall TForm1::FormCreate(TObject *Sender)

    Fbmp=new Graphics::TBitmap; //Создание Bitmap'a

    Fbmp->Width=100; //Начальная ширина

    Fbmp->Height=100; //Начальная высота

    Для того, чтобы объект Fbmp стал доступным всем методам класса нашей формы, добавим в файл Unit1.h следующую строку:

    class TForm1: public TForm;

    private

    Graphics::TBitmap *Fbmp;

    По  событию OnClick (щелчок по любому свободному месту формы) организуем следующие построения. На каждом из пяти объектов, включая форму, обведем контуры квадрата размером 100´100, залитого цветом своего фона. Затем организуем цикл построения 10000 случайных точек в каждом из квадратов. По окончанию цикла скопируем содержимое Bitmap на канву формы, начиная с координаты (0,120).

    void __fastcall TForm1::Form1Click(TObject *Sender)

    int j,x,y;

Информация о работе Графическое построение объектов в среде Delphi