- •Обробка виключних ситуацій
- •6.0804 “Комп’ютерні науки”
- •1. Мета роботи
- •2.Основні теоретичні відомості
- •2.1. Оператори мови java
- •15.1. Модель обробки "поставщик-споживач"
- •15.2. Класи-фільтри
- •15.6. Модель обробки прямим доступом
- •15.7. Перетворення зображення в Java 2d
- •15.8. Афінне перетворення зображення
- •15.9. Зміна інтенсивности зображення
- •Import java.Awt.*;
- •Import java.Awt.Image.*;
- •Import java.Awt.Event.*;
- •15.10. Зміна складових кольору
- •15.11. Створення різних эфектів
- •Import java.Awt.*;
- •Import java.Awt.Event.*;
- •15.13. Покращення зображення подвійною буферизацією
- •50, 50, 0, 360, Arc2d.Open));
- •15.14. Звук
- •Import java.Applet.* ;
- •Import java.Net.*;
- •15.15. Програвання звуку в Java 2
- •Import javax.Sound.Sampled.*;
- •Import java.Io.*;
- •If (!AudioSystem.IsLineSupported(info)){
- •Import javax.Sound.Sampled.*;
- •Import java.Io.*;
- •If (!AudioSystem.IsLineSupported(info)){
- •Import javax.Sound.Midi.*;
- •Import java.Io.*;
- •15.16. Синтез і запис звуку в Java 2
- •Import javax.Sound.Midi.*;
- •Import java.Io.*;
- •3.Контрольні запитання
- •4.Лабораторне завдання
- •Мета роботи.
- •Список рекомендованої літератури
15.6. Модель обробки прямим доступом
Подібно до того, як замість класу Graphics система Java 2D використовує його розширення Graphics2D, описане в уроці 9, замість класу Іmage в Java 2D використовується його розширення — клас BufferedІmage. В конструкторі цього классу
Bufferedlmage(int width, int height, int imageType)
задаються розміри зображення і спосіб зберігання точок — одна із констант:
TYPE_INT_RGB TYPE_INT_ARGB TYPE_INT_ARGB_PRE TYPE_INT_BRG |
TYPE_BYTE_GRAY TYPE_BYTE_BINARY TYPE_BYTE_INDEXED |
TYPE_3BYTE_BRG TYPE_4BYTE_ABRG TYPE_4BYTE_ABRG_PRE
|
TYPE_USHORT_GRAY TYPE_USHORT_565_RGB TYPE_USHORT_555_RGB |
Як бачите, кожний піксель може займати 4 байти — INT, 4BYTE, або 2 байта — USHORT, або 1 байт — BYTE. Може використовуватися кольорова модель RGB, або додана альфа-складова — ARGB, або задани інший порядок розташування кольорових складових — BRG, або задані градації сірого кольору — GRAY. Кожна складова кольору може займати один байт, 5 бітів або 6 бітів. Екземпляри класу BufferedІmage рідко створюються конструкторами. Для їх створення частіше звертаються до методів createІmage () класу Сomponent з простим приведенням типу:
BufferedІmage bi = (Bufferedlmage)createІmage(width, height)
При цьому екземпляр bi отримує характеристики компонента: колір фону і колір рисування, спосіб зберігання точок. Розташування точок в зображенні регулюється класом Raster або його підкласом WritabІeRaster. Ці класи задають систему координат зображення, представляють доступ до окремих пікселів методами getPixeІ(), дозволяють виділяти фрагменти зображення методами getPixeІs(). Клас WritabІeRaster додатково дозволяє змінювати окремі пікселі методами getPixeІ() або цілі фрагменти зображення методами setPixels() і setRect(). Початок системи координат зображення — лівий верхній кут — має координати (minХ, minY), не обовязково рівні нулю.
При створенні екземпляра класу BufferedІmage автоматично формується звязанный з ним екземпляр класу WritabІeRaster. Точки зображення зберігаються в скритому буфері, вміщаючим одновимірний або двовимірний масив точок. Вся робота з буфером здійснюється методами одного із класів DataBufferByte, DataBufferlnt, DataBufferShort, DataBufferushort в залежності від довжини даних. Загальні властивості цих класів зібрані в їх абстрактному суперкласі DataBuffer. В ньому визначені типи даних, що зберігаються в буфері: TYPE_BYTE, TYPE_SHORT, TYPE_INT, TYPE_ІNDEFINED.
Методи класу DataBuffer дозволяють прямий доступ до даних буфера, але зручніше і безпечніше звертатися до них методами класів Raster і WritableRaster. При створенні екземпляра класу Raster або класу WritableRaster створюється екземпляр відповідного підкласу класу DataBuffer. Щоб не враховувати спосіб зберігання точок зображення, Raster може звертатися не до буфера DataBuffer, а до підкласів абстрактного класу SampІeModeІ, що розглядає не окремі байти буфера, а складові (samples) кольору. В моделі RGB — це червона, зелена і синя складові. В пакеті java.awt. image єсть пять підкласів класу SampІeModeІ:
СomponentSampІeModel — кожна складова кольору зберігається в окремому елементі масива DataBuffer;
BandedSampleModel — дані зберігаються по складовим, складов одного кольору зберігаються в одному масиві, a DataBuffer містить двовимірний масив: по масиву для кожної складової; даний клас розширяє класс ComponentSampІeModel;
PixelInterleavedSampІeModel — всі складові кольору одного пікселя зберігаються в сусідніх елементах єдиного масива DataBuffer; даний клас розширяє клас ComponentSampІeModel;
MultiPixeІPackedSampІeModel — колір кожного пікселя містить тільки одну складову, яка може бути упакована в один елемент масива DataBuffer;
SingІePixelPackedSampleModel — всі складові кольору кожного пікселя зберігаються в одному елементі масиву DataBuffer.
На рис. 15.5 представлена ієрархія класів Java 2D, реалізуюча модель прямого доступу. Отже, Java 2D створює складну і розгалуджену трьохшарову систему DataBuffer — SampІeModeІ — Raster управління даними зображення BufferedІmage. Ви можете маніпулювати точками зображення, використовуючи їх координати в методах класів Raster або спуститься на рівень нижче і звертатися до складових кольору піксела методами класів SampІeModeІ. Якщо ж вам треба працювати з окремими байтами, скористуйтесь класами DataBuffer. Застосовувати цю систему приходиться рідко, тільки при створенні свого способу перетворення зображення. Стандартні ж перетворення виконуються дуже просто.