1.2  Вивід зображень за допомогою пікселів

Малювати на канві можна різними способами. Перший варіант — малювання по пикселам. Для цього використовується властивість канви Pixels. Цією властивістю є двовимірний масив Canvas->Pixels[intX][int Y], який відповідає за кольори канви. Наприклад, Canvas->PixeIs[10][20] відповідає кольору пиксела, 10-го зліва і 20-го зверху. З масивом пикселов можна звертатися як з будь-якою властивістю: змінювати колір, задаючи пикселу нове значення, або визначати його колір по значенню, що зберігається в нім. Наприклад, Canvas->PixeIs[10][20]= clBlack — це завдання пикселу чорного кольору.

Давайте спробуємо намалювати графік деякої функції F(X) наканве компоненту Imagel, якщо відомий діапазон її зміни Ymax і Ymin і діапазон зміни аргументу Xmin і Хтах. Це можна зробити такою процедурою:

float X,Y; // координати функції

int PX,PY; // координати пикселов

for (РХ = 0: РХ <= Imagel->Width; Рх++)

//Х- координата, відповідна пикселу з координатою РХ

X = Xmin + РХ * (Xmax - Xmin) / Imagel->Width;

Y = F(X); //PY - координата пиксела, відповідна координаті Y

PY = imagel->Height - (Y - Ymin)*Imagel->Height/(Ymax-Ymin); //Устанавливается чорний колір вибраного пиксела

Imagel->Canvas->Pixels[PX][PY] = clBlack;}

У цьому коді вводяться змінні X і Y, що є значеннями аргументу і функції, а також змінні РХ і PY, що є координатами пикселов, відповідними X і Y. Сама процедура складається з циклу по всіх значеннях горизонтальної координати пикселов РХ компоненту Imagel. Спочатку вибране значення Рхнересчитиваєтсявсоответствующєєзначенієх. Потім проводиться виклик функції і визначається її значення Y. Це значення перераховується у вертикальну координату пиксела PY. І на закінчення колір пиксела з координатами (РХ, PY) встановлюється чорним.

Спробуйте створити відповідне застосування і подивитися, як воно працює. Хай для простоти ми орієнтуватимемося на функцію sin(X), для якої Xmin=0, Хmax=4pi (2 періоди в радіанах), Ymin=-1, Ymax=l.

Почніть новий проект, помістіть на нього компонент Image і кнопку з написом «Намалювати», в обробник події OnClick якою запишіть код, аналогічний приведеному вище, але що конкретизує функцію:

#define Pi 3.14159

float X, Y; // координати функції

int РХ, PY; // координати пикселов

for (РХ = 0: РХ <- Imagel->Width; PX++)

{//X - координата, відповідна пикселу з координатою РХ

X = РХ * 4 * Pi / imagel->Width;

Y = sin(X); //PY - координата пиксела, відповідна координаті У

PY = Imagel->Height - (Y+1) * Imagel->Height / 2; //Устанавливается чорний колір вибраного пиксела

Imagel->Canvas->Pixels(PX][PY] = clBlack; }

1.3  Збереження конфігурації в файлах ini

|Файли .ini - це текстові файли, призначені для зберігання інформації про настройки різних програм. Інформація у файлі логічно групується в розділи, кожен з яких починається оператором заголовка, поміщеним в квадратні дужки. Наприклад [Desktop|]. У рядках, наступних за заголовком, міститься інформація, що відноситься до даного розділу, у формі:

<ключ>=<значення>

[dBASE| Files|]

Driver32=C|:\WINDOWS\SYSTEM\odbcjt32.dll

Файли .ini, як правило, зберігаються в каталозі Windows|, який можна знайти за допомогою функції GetWindowsDirectory|.

У C++Builder| роботу з файлами .ini найпростіше здійснювати за допомогою створення в програмі об'єкту типу TIniFile|. Цей тип описаний в модулі inifiles|, який треба підключати до програми оператором uses| (автоматично це не робиться).

При створенні об'єкту типу TlniFile| в нього передається ім'я файлу .ini, з яким він зв'язується. Файл повинен існувати до створення об'єкту.

Для запису значень ключів існує багато методів: WriteString|, WriteInteger|, WriteFloat|, |і ін. Кожен з них записує значення відповідного типу. Оголошення всіх цих методів дуже схожі. Наприклад:

void| fastcall| WriteString| (const| AnsiString| Section|

const| AnsiString| Ident|, const| AnsiString| Value|);

void| fastcall| Writelnteger| (const| AnsiString| Section|

const| AnsiString| Ident|, int| Value|);

У всіх оголошеннях Section| - розділ файлу, Ident| - ключ цього розділу, Value| - значення ключа. Якщо відповідний розділ або ключ відсутній у файлі, він автоматично створюється.

Є аналогічні методи читання: ReadString|, Readlnteger|, ReadFloat|, ReadBool| і ін. Наприклад:

AnsiString| fastcall| ReadString| (const| AnsiString| Section|

const| AnsiString| Ident|, const| AnsiString| Default|);

int| fastcall| Readlnteger| (const| AnsiString| Section|

const| AnsiString| Ident|, int| Default|);

Методи повертають значення ключа| розділу Section|. Параметр Default| визначає значення, що повертається у випадку, якщо у файлі не вказано значення відповідного ключа.

Перевірити наявність значення ключа можна методом ValueExists|, в який передаються імена розділу і ключа. Метод DeleteKey| видаляє з файлу значення вказаного ключа у вказаному розділі. Перевірити наявність у файлі необхідного розділу можна методом SectionExists|. Метод EraseSection| видаляє з файлу вказаний розділ разом зі всіма його ключами. Є ще ряд методів, які ви можете подивитися у вбудованій довідці C++Builder|.

Подивимося на прикладі, як все це можна використовувати для установки програми, запам'ятовування її настройоки і для видалення програми.

Зробіть просте тестову програму. Перенесіть на форму три кнопки Button| і діалог FontDialog|. Перша кнопка (назвіть її BInst| і задайте напис Install|) імітуватиме установку програми. Точніше, не саму установку, оскільки копіювати файли з загрузочної дискети ми не будемо, а тільки створення файлу .ini у каталозі Windows|. Друга кнопка (назвіть її BUnlnst| і задайте напис Unlnstall|) імітуватиме видалення програми. Тут ми не видалятимемо саму програму з диска, а тільки видалимо з каталога Windows| наш файл, а третя кнопка (назвіть її BFont| і задайте напис Font|) дозволятиме змінювати ім'я шрифту, використовуваного у формі, і забезпечить запам'ятовування цього шрифту у файлі .ini, щоб надалі при запуску програми можна було читати цю настройку і задавати її формі.


Розділ 2. Практична частина

 


Информация о работе «Система координат канви»
Раздел: Информатика, программирование
Количество знаков с пробелами: 36062
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
102567
1
0

... на учащихся с различным познавательным, творческим потенциалом. Таким образом, важнейшей характеристикой системы дополнительно художественного образования является направленность на развития творческих способностей детей и свобода в реализации педагогических инноваций. 2.2.       Восприятие музыки детьми младшего школьного возраста В музыкально-методической литературе термины «восприятие» и « ...

Скачать
766403
1
0

... философии - особенно с методо­логических позиций материалистического понимания исто­рии и материалистической диалектики с учетом социокультурной обусловленности этого процесса. Однако в западной философии и методологии науки XX в. фактически - особенно в годы «триумфального шествия» ло­гического позитивизма (а у него действительно были немалые успехи) - научное знание исследовалось без учета его ...

Скачать
42499
1
3

... то, что: –  При повышении степени сжатия изображение распадаемся на отдельные квадраты (8x8). –  Проявляется эффект Гиббса – ореолы по границам резких переходов цветов.   Форматы графических файлов В компьютерной графике применяют по меньшей мере три десятка форматов файлов для хранения изображений. Но лишь часть из них стала стандартом «де-факто» и применяется в подавляющем большинстве ...

Скачать
80904
0
0

... вошли в историю советского кинематографа, стали классикой, его постановка «Идиота» - провозвестником «новой волны», примером творческой борьбы и поиска. II.4. Фильм В.Бортко «Идиот» Последняя полная экранизация романа Ф.М. Достоевского «Идиот» была сделана одним из известных российских режиссеров кино Владимиром Бортко в 2003 году. Премьера фильма стала триумфальной. Это фиксируется и в ...

0 комментариев


Наверх