Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab11_Java_Vkazivky_2010_Mutimedia in Java_ Ima....doc
Скачиваний:
1
Добавлен:
17.04.2019
Размер:
863.23 Кб
Скачать

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. Застосовувати цю систему приходиться рідко, тільки при створенні свого способу перетворення зображення. Стандартні ж перетворення виконуються дуже просто.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]