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. Практична частина
... на учащихся с различным познавательным, творческим потенциалом. Таким образом, важнейшей характеристикой системы дополнительно художественного образования является направленность на развития творческих способностей детей и свобода в реализации педагогических инноваций. 2.2. Восприятие музыки детьми младшего школьного возраста В музыкально-методической литературе термины «восприятие» и « ...
... философии - особенно с методологических позиций материалистического понимания истории и материалистической диалектики с учетом социокультурной обусловленности этого процесса. Однако в западной философии и методологии науки XX в. фактически - особенно в годы «триумфального шествия» логического позитивизма (а у него действительно были немалые успехи) - научное знание исследовалось без учета его ...
... то, что: – При повышении степени сжатия изображение распадаемся на отдельные квадраты (8x8). – Проявляется эффект Гиббса – ореолы по границам резких переходов цветов. Форматы графических файлов В компьютерной графике применяют по меньшей мере три десятка форматов файлов для хранения изображений. Но лишь часть из них стала стандартом «де-факто» и применяется в подавляющем большинстве ...
... вошли в историю советского кинематографа, стали классикой, его постановка «Идиота» - провозвестником «новой волны», примером творческой борьбы и поиска. II.4. Фильм В.Бортко «Идиот» Последняя полная экранизация романа Ф.М. Достоевского «Идиот» была сделана одним из известных российских режиссеров кино Владимиром Бортко в 2003 году. Премьера фильма стала триумфальной. Это фиксируется и в ...
0 комментариев