Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 63933
Модуль Forms 63639
ТЕХНОЛОГИИ ДОСТ... 60505
Пример работы с... 59942
Имитационное мо... 55985
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

Пользователей: 13,079
новичок: Openair
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Двунаправленный динамический список на Delphi + Блок схемы
Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
Моделирование процесса обработки заданий пакетным режимом работы с квант...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Использование битовых образов, их загрузка из файла ресурсов
Битовый образ – это находящаяся в памяти компьютера картинка,
которую можно быстро вывести на поверхность формы или в область
отображения иллюстрации. Создать битовый образ можно путем за-
грузки из файла (*.bmp, *.jpg, *.gif), ресурса или путем копирования из
другого графического объекта (например, Image). В программе бито-
вый образ
представляет собой объект типа TBitMap.
Битовые образы удобно использовать при работе с графикой.
При работе с битовыми образами нужно:
1) объявить переменную типа TBitMap (например, Var bm: TBitMap);
2) создать битовый образ можно с помощью метода Create, напри-
мер, bm:=TBitmap.Create;
3) загрузить битовый образ из файла можно с помощью метода
LoadFromFile(), указав в качестве параметра имя bmp-файла, в
котором хранится изображение. Например, после выполнения
оператора bm.LoadFromFile('Picture.bmp') битовый образ bm
будет содержать изображение из файла Picture.bmp;
4) вывести битовый образ на поверхность формы или в область ком-
понента путем применения метода Draw или StretchDraw к свой-
ству Canvas. Например, инструкция
Image1.Canvas.StretchDraw(Rect(0, 0, Image1.Width,
Image1.Height), bm);



выводит битовый образ bm на поверхность компонента Image1,
изменяя его размеры так (растягивая или сжимая), чтобы битовый
образ полностью отобразился в компоненте.
Инструкция
Image2.Canvas.Draw(x, y, bm);



выводит битовый образ bm на поверхность компонента Image2.
Первые два параметра метода определяют положение верхнего уг-
ла картинки на графической поверхности компонента.
Для битового образа можно задать прозрачный цвет. Делается это
с помощью его свойств TransparentColor и Transparent. При этом
точки картинки, цвет которых совпадает с прозрачным, при выводе
битового образа не отображаются. Так для того, чтобы сделать желтый
цвет прозрачным, надо написать инструкции:
bm.TransparentColor:=clYellow;//задан прозрачный цвет
bm.Transparent:=true; //разрешен прозрачный цвет



Если не указывать прозрачный цвет, то при использовании инст-
рукции bm.Transparent:=true, в качестве прозрачного будет исполь-
зован цвет, совпадающий с цветом левой нижней точки рисунка.
Рассмотрим пример, демонстрирующий работу с битовыми образ-
ами
. Создадим приложение, в котором на фоне воды в случайном мес-
те при прорисовке формы появляется изображение рыбки (рис. 1.5).
Фон и изображение рыбки – битовые образы, загруженные из файлов.
Объект и фоновый рисунок
Рис. 1.5. Объект и фоновый рисунок
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, ExtCtrls,
StdCtrls, XPMan, ColorGrd;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
water: TBitmap; //фоновая картинка воды
fish: TBitmap; //картинка с рыбой
p_exit: boolean; //признак отсутствия файла с изображением
//Обработка события Create для формы
procedure TForm1.FormCreate(Sender: TObject);
begin
p_exit:=false;
try
//если файлы картинок не доступны, то при
//выполнении метода Create произойдет исключение
water:=TBitmap.Create;//создание объекта-битового образа
//Загрузка фона из файла
water.LoadFromFile('Вода.bmp');
fish:=TBitmap.Create; //создание объекта-битового образа
//Загрузка из файла изображения рыбки
fish.LoadFromFile('Рыбка.bmp');
except
MessageDlg('Файл с изображением отсутствует',
mtError,[mbOK],0);
p_exit:=true
end
end;
//Обработка события Paint
procedure TForm1.FormPaint(Sender: TObject);
var
x, y: integer;
begin
if p_exit then exit;
randomize;
//случайный выбор координат
x:=random(Form1.ClientWidth-Form1.ClientWidth div 3);
y:=random(Form1.ClientHeight-Form1.ClientHeight div 3);
//отрисовка фона - воды
Form1.Canvas.StretchDraw(Rect(0, 0, Form1.Width,
Form1.Height), water);
// в качестве прозрачного будет использован цвет,
// совпадающий с цветом левой нижней точки рисунка
fish.Transparent:=true; //разрешен прозрачный цвет
//отрисовка рыбки
Form1.Canvas.StretchDraw(Rect(x, y, x+Form1.ClientWidth
div 3, y+Form1.ClientHeight div 3), fish)
end;
//Обработка события Close
procedure TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
//освобождение памяти
water.Free;
fish.Free
end;
end.



Теперь рассмотрим пример реализации перемещения одного изо-
бражения на фоне другого: перемещение рыбки на фоне воды (оба
изображения – битовые образы). Эффект перемещения достигается
путем перерисовки изображения с некоторым смещением относитель-
но его прежнего положения. При этом перед выводом картинки в но-
вой точке предварительно необходимо удалить предыдущее изображе-
ние путем перерисовкой фона, причем рациональнее обновлять его
только в той области, которая до момента перерисовки содержала сти-
раемое изображение. Стереть картинку можно методом CopyRect, ко-
торым нужно осуществить копирование нужной части фона из буфера
на поверхность компонента. В примере изображение формируется на
поверхности формы, а компонент Timer служит для инициализации
процесса перерисовки рыбки в новом месте:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls, StdCtrls,
XPMan, ColorGrd;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender:TObject; var Action:
TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
water: TBitmap; //фоновая картинка воды
fish: TBitmap; //картинка с рыбкой
p_exit: boolean; //признак отсутствия файла с изображением
x, y: integer; //текущее положение картинки
w, h: integer; //размеры картинки с рыбкой
//Обработка события Create для формы
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
p_exit:=false;
Timer1.Interval:=100; //интервал времени для таймера
try
//если файлы картинок не доступны, то при
//выполнении метода Create произойдет исключение
water:=TBitmap.Create;//создание объекта-битового образа
//загрузка фона из файла
water.LoadFromFile('Вода.bmp');
//размер формы подгоняем под размер изображения с фоном
Form1.ClientHeight:=water.Height;
Form1.ClientWidth:=water.Width;
fish:=TBitmap.Create; //создание объекта-битового образа
//Загрузка из файла изображения рыбки
fish.LoadFromFile('Рыбка.bmp');
w:=Form1.ClientWidth div 3;//ширина картинки с рыбкой
h:=Form1.ClientHeight div 3; //высота картинки с рыбкой
fish.Transparent:=true; //разрешаем прозрачный цвет,
//определяемый левым нижним
//пикселем картинки
//начальное положение картинки
x:=Form1.ClientWidth;
y:=random(Form1.ClientHeight-h);
except
MessageDlg('Файл с изображением отсутствует', mtError,
[mbOK],0);
p_exit:=true;
Timer1.Enabled:=false //останавливаем таймер
end;
end;
//Обработка события Paint
procedure TForm1.FormPaint(Sender: TObject);
begin
if p_exit then exit;
//отрисовка фона - воды
Form1.Canvas.Draw(0, 0, water);
end;
//Обработка сигнала таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
randomize;
if p_exit then exit;
//восстановлением фона удалим рисунок
Form1.Canvas.CopyRect(Rect(x, y, x+w, y+h), water.Canvas,
Rect(x, y, x+w, y+h));
//новые координаты вывода рыбки
x:=x-5;
if x<-w
then begin
x:=Form1.ClientWidth;
y:=random(Form1.ClientHeight-h);;
end;
//отрисовка рыбки в новом месте
Form1.Canvas.StretchDraw(Rect(x, y, x+w, y+h), fish)
end;
28
//Обработка события Close
procedure TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
//освобождение памяти
water.Free;
fish.Free;
end;
end.



В предыдущих двух примерах битовые образы загружались из
файлов. Но можно загружать их из ресурса. Ресурс – это данные, кото-
рые находятся в выполняемом файле. Чтобы загрузить битовый образ
из ресурса, необходимо
:
1) создать файл ресурсов, поместив в него нужные изображения;
2) включить содержимое файла ресурсов в exe-файл, дав компи-
лятору соответствующее указание.
При использовании файла ресурсов все нужные для работы файлы
картинок находятся в исполняемом файле, поэтому не надо заботиться
о том, чтобы во время работы программы файлы картинок были дос-
тупны.
Чтобы создать новый файл ресурсов, надо воспользоваться утили-
той Tools/Image Editor. В меню File выбрать команду New/
Recourse File
. После создания файла ресурсов в него надо помес-
тить необходимые ресурсы - битовые образы. Для этого из меню Resource
или из контекстного меню надо выбрать команду New/Bitmap
(рис. 1.6) и в появившемся окне Bitmap Properties (рис. 1.7) указать
размер и количество цветов создаваемого изображения.
Добавление в файл ресурсов нового ресурса
Рис. 1.6. Добавление в файл ресурсов нового ресурса
Диалоговое окно Bitmap Properties
Рис. 1.7. Диалоговое окно Bitmap Properties
После установок характеристик битового образа и нажатия на
кнопке ОК, в иерархическом списке Contents появится элемент
Bitmap1 (рис. 1.8), изображающий созданный ресурс. Сформирован-
ное средой имя ресурса (Bitmap1) следует изменить, выбрав в его кон-
текстном меню команду Rename.
Файл ресурсов после добавления: а) ресурса Bitmap; б) двух ресурсов Bitmap и иконки приложения Icon
Рис. 1.8. Файл ресурсов после добавления: а) ресурса Bitmap; б) двух ресурсов Bitmap и иконки приложения Icon
Приступить непосредственно к формированию изображения мож-
но, выполнив двойной щелчок мышью на нужном ресурсе, или выбрав
команду меню Resource/Edit. После этого можно приступить к соз-
данию нужной картинки, используя инструменты графического редак-
тора Image Editor, который предоставляет программисту стандартный
для подобных редакторов набор инструментов, используя которые
можно нарисовать нужную картинку. Если во время работы надо из-
менить масштаб отображения картинки, то для увеличения масштаба
следует выбрать команду меню View/Zoom In, а для уменьшения —
команду Zoom Out. Увидеть картинку в реальном масштабе можно,
выбрав команду меню View/Actual Size.
Если в файл ресурсов надо включить уже существующий файл
картинки (или ее часть), то ее содержимое надо скопировать в буфер
обмена, например, при помощи редактора Paint. При выделении копи-
руемой области необходимо следить за ее размером (Paint выводит
информацию о размере выделяемой области в строке состояния). За-
тем надо поместить картинку из буфера в Image Editor.
После добавления всех необходимых картинок в файл ресурса, ко-
мандой меню File/Save его необходимо сохранить в каталоге с раз-
рабатываемым проектом. Image Editor присваивает файлу ресурсов
расширение res.
После создания файла ресурсов его необходимо подключить к раз-
рабатываемому приложению. Для этого в текст программы необходи-
мо поместить директиву компилятора, информирующую его о необхо-
димости включения в exe-файл содержимого файла ресурсов. Эту ди-
рективу обычно помещают в начале текста модуля. В общем случае
директива имеет синтаксис:
{$R Имя_файла_ресурсов}



Загрузка битового образа из ресурса производится методом
LoadFromResourseName(), который имеет два параметра: идентифика-
тор программы и имя ресурса. В качестве идентификатора программы
используется глобальная переменная HInstance, а в качестве имени
ресурса – идентификатор ресурса, заданный во время создания ресур-
са. Например, инструкция:
water.LoadFromResourceName(HInstance, 'WATER');



загружает в битовый образ water картинку из ресурса WATER.
В предыдущем примере изменим источник, содержащий загру-
жаемый фон (воду) и перемещающийся объект (рыбку): вместо файлов
организуем загрузку изображений из файла ресурсов.
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R images.res} //подключить файл ресурсов
var
water: TBitmap; //фоновая картинка воды
fish: TBitmap; //картинка с рыбкой
x, y: integer; //текущее положение картинки
w, h: integer; //размеры картинки с рыбкой
//Обработка события Create для формы
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
Timer1.Interval:=100; //интервал времени для таймера
//создаnm два объекта - битовых образа
water:=TBitmap.Create;
fish:=TBitmap.Create;
//загрузить битовые образы из файла ресурсов
water.LoadFromResourceName(HInstance, 'WATER');
fish.LoadFromResourceName(HInstance, 'FISH');
//размер формы подгоняем под размер изображения с фоном
Form1.ClientHeight:=water.Height;
Form1.ClientWidth:=water.Width;
fish.Transparent:=true; //разрешаем прозрачный цвет,
//определяемый левым нижним
//пикселем картинки
w:=Form1.ClientWidth div 3;//ширина картинки с рыбкой
h:=Form1.ClientHeight div 3; //высота картинки с рыбкой
//начальное положение картинки
x:=Form1.ClientWidth;
y:=random(Form1.ClientHeight-h);
end;
//Обработка события Paint
procedure TForm1.FormPaint(Sender: TObject);
begin
//отрисовка фона - воды
Form1.Canvas.Draw(0, 0, water);
end;
//Обработка сигнала таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
randomize;
//восстановлением фона удалим рисунок
Form1.Canvas.CopyRect(Rect(x, y, x+w, y+h), water.Canvas,
Rect(x, y, x+w, y+h));
//новые координаты вывода рыбки
x:=x-5;
if x<-w
then begin
x:=Form1.ClientWidth;
y:=random(Form1.ClientHeight-h);;
end;
//отрисовка рыбки в новом месте
Form1.Canvas.StretchDraw(Rect(x, y, x+w, y+h), fish)
end;
//Обработка события Close
procedure TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
//освобождение памяти
water.Free;
fish.Free;
end;
end.
















Опубликовал Kest December 06 2009 14:51:58 · 0 Комментариев · 14000 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
PDJ Scrollers
Программирование ...
Tenis [Исходник н...
База данных фильм...
Синтаксический ан...
Самоучитель C++
Цветной Grid
Delphi 7: Для про...
Игра в крестики н...
DemoEdit [Исходни...
Создание лабиринт...
Шкрыль А. - Разра...
Delphi. Учимся на...
Converter AMR<->W...
Sztransppanel
Векторный редакто...
Голосование для ...
VFW
Программирование ...
Программирование ...

Топ загрузок
Приложение Клие... 100450
Delphi 7 Enterp... 85845
Converter AMR<-... 20067
GPSS World Stud... 12518
Borland C++Buil... 11579
Borland Delphi ... 8507
Turbo Pascal fo... 7023
Visual Studio 2... 4989
Калькулятор [Ис... 4739
FreeSMS v1.3.1 3536
Случайные статьи
Goal,Rules. камеры...
Создание псевдоним...
Заказ презентации
1.4.1. Адаптеры да...
Программирование: ...
Бизнес-процессы
Подмена функций ст...
Проект подсети
Инсталляция библио...
Сложение упакованн...
Порождение класса ...
Функция MessageBox...
Френды (друзья) в ...
Если RF-кабель при...
Ответы см
как SA должны быть...
Рассказывайте людя...
Да! При проектиров...
Существуют три реж...
Структура модуля
Вопрос скорости
Импорт статических...
Invalid symbol ref...
Управление риском
Путаница в термино...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?