Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

До розд. 2.3) Використання двовимірних масивів для збереження та обробки зображень




Питання для роздумів

Динамічний масив, повторне визначення масиву, функція UBound, що повертає верхню границю діапазону значень індексу.

1. Як Ви вважаєте, чому дорівнюватиме обсяг пам'яті, що відведена масиву з прикладу 2.9, після вводу в нього даних, представлених на мал. 2.5?

2. 10. А чому б дорівнював обсяг пам'яті, якби вводилися не 4 рядки фіксованої довжини, а така ж кількість дат народження (значень типу Date)?

3. Як, виправивши всього один символ (!) у програмі коду 2.15, можна заощадити ще 30 байт пам'яті, що надається масиву, не втративши при цьому жодного символу корисної інформації? Відповідь:В операторі ReDim, записаному відразу після циклу з умовою, варто вказати наступну верхню границю значень індексу: UBound (Масив - 2).

Спочатку нагадаємо Вам, що мова Visual Basic має у своєму розпорядженні графічні методи, що застосовуються до таких об'єктів, як Форма і Графічне вікно.

За допомогою графічних методів, а також іншими способами зазначені об'єкти можна заповнювати самими різними зображеннями. Крім того, на цих об'єктах можна «друкувати» — застосовувати до них метод Print.

Графічні методи і метод Print створюють на формі чи у графічному вікні множину пікселів — кольорових плям. Піксель настільки малий, що сприймається людським оком як точка, тобто об'єкт, що не має довжини і ширини. (Розмір пікселя, тобто його довжину чи ширину, для стислості теж називають пікселем.)

Коли Ви починаєте проектувати інтерфейс Вашого додатка, екранна форма і всі об'єкти на ній за замовчуванням виміряються у твіпах. (Нагадаємо Вам, що твіп — це дуже маленька величина, вона в 15 разів менше, ніж піксель.) Практично, вимір у твіпах буває корисним тільки при друці зображення на принтері, — при малюванні на екрані використовуються, як правило, не твіпи, а пікселі.

Якщо у Вашій програмі Ви збираєтеся використовувати графічні методи, доцільно від твіпів перейти до пікселів — провести масштабування об'єкта, на якому Ви будете малювати. Зробити це можна двома способами:

1. На етапі розробки інтерфейсу потрібно встановити значення властивості ScaleMode об'єкта рівним Pixel (за замовчуванням воно дорівнює Twip), і відповідні значення властивостей ScaleWidth і ScaleHeight. Наприклад, 150 і 150. (У твіпах розміри були б рівні 2250 і 2250).

2. Відразу після початку роботи Вашої програми повинен спрацювати записаний у ній оператор виду: Ім’яОб’єкma.Scale (x l, y l ) - (x 2, y 2 ). У цьому операторі міститься графічний метод Scale, що застосовується до об'єкта з даним ім'ям.

Другий спосіб кращий, тому що він, на додаток до зміни масштабу, дозволяє малювати картинки в зручній для Вас системі координат. Якщо ж координати x l = 0 і y l = 0 Вас влаштовують, можете обмежитися першим способом.

А тепер розглянемо питання про те, як можна використовувати поняття двовимірного масиву для збереження зображення в програмі і для обробки (перетворення) цього зображення.

Приклад 2.10. Нехай у лівому верхньому куті графічного вікна за допомогою методів Print і Line Вам вдалося створити красиве зображення букви «Б» на фоні розфарбованого прямокутника. І нехай Ви хочете побудувати ще 3 зображення, симетричні першому зображенню (мал. 2.6).

Мал. 2.6. Вхідне (у лівому верхньому куті) і симетричні йому зображення

Допустимо, графічне вікно має розміри 150 x 150 пікселів. А зображення в лівому верхньому куті цього вікна — 50 x 70 пікселів.

Кожен піксель зображення характеризується двома координатами в системі координат графічного вікна і кольором — цілим числом типу Long. Цю інформацію можна зберігати в програмі у вигляді двовимірного масиву Color(50, 70) As Long. Неважко зміркувати, що для збереження даних у цьому масиві буде відведена пам'ять у 14 кілобайт (нагадаємо, що одне довге ціле число (типу Long) займає 4 байти пам'яті).

Замість одного масиву типу Long можна скористатися трьома масивами типу Byte — у них можна зберігати значення трьох аргументів функції для кожного пікселя (аргументів Red, Green і Blue). У цьому випадку ми заощаджуємо пам'ять — для всіх трьох масивів буде потрібно всього 10.5 кілобайт.

Розглянемо програму, за допомогою якої колір кожного пікселя вихідного зображення буде поміщений у 3 зазначених масиви, після чого будуть побудовані інші картинки.

Для зчитування кольору кожного пікселя вихідного зображення використовується новий для Вас графічний метод Point (x, y). Подібно до функції, він повертає значення — колір точки з координатами x, y.

Для перетворення довгого цілого числа (кольору пікселя) у 3 числа типу Byte (в аргументи функції RGB, що повертає цей колір), можна використовувати наступну загальну процедуру:

Код 2.16.

Вся інша частина програми — у наступному коді:

Код 2.17.

Усі необхідні коментарі до цієї програми — у коді самої програми.

Hові поняття:

збереження зображень, обробка зображень, метод Point (визначення кольору точки зображення).




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 464; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.