- •Обробка виключних ситуацій
- •6.0804 “Комп’ютерні науки”
- •1. Мета роботи
- •2.Основні теоретичні відомості
- •2.1. Оператори мови java
- •15.1. Модель обробки "поставщик-споживач"
- •15.2. Класи-фільтри
- •15.6. Модель обробки прямим доступом
- •15.8. Афінне перетворення зображення
- •15.7. Перетворення зображення в Java 2d
- •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.11. Створення різних эфектів
Операція згортання (convolution) задає значення кольору точки в залежності від кольорів сусідніх точок наступним способом. Нехай точка з координатами (х, у) має колір, вираженим числом А(х, у). Складаємо масив із девяти дійсних чисел w(0), w(i), ... w(8). Тоді нове значенне кольору точки з координатами (х, у) буде рівним:
w(0)*A(x-l, y-l)+w(l)*A(x, y-l)+w(2)*A(x+l, y-l)+ w(3)*A(x-l, y)+w(4)*A(x, y)+w(5)*A(x+l, у)+
w(6)*A(x-l, y+l)+w(7)*A(x, y+l)+w(8)*A(x+l, y+1)
Задаючи різні значення ваговим коефіцієнтам w(i), будемо отримувати різні эфекти, підсилюючи чи зменшуючи вплив сусідніх точок. Якщо сума всіх девяти чисел w(i) рівна 1.0f, то інтенсивність кольору залишиться попередня. Якщо при цьомц всі ваги рівні між собою, тобто рівні 0.1111111f, то одержимо ефект размитості, тумана, димки. Якщо вага w(4) значно більше решти при загальній сумі їх l.0f, то зростає контрастність, виникає эфект графіки, штрихового рисунка.
Можно згорнути не тільки сусідні точки, але і наступні ряди точок, взявши масив вагових коэфіцієнтів із 15 елементов (3x5, 5x3), 25 элементів (5x5) і більше. В Java 2D згортання робиться так. Спочатку визначаємо масив ваг, наприклад:
float[] w = {0, -1, 0, -1, 5, -1, 0, -1, 0};
Потім створюємо екземпляр класу Kernel — ядра згортання:
Kernel kern = new Kernel(3, 3, w);
Потім обєкт класу ConvoІveOp з цим ядром:
ConvolveOp conv = new ConvoiveOp(kern);
Все готово, застосовуємо метод filter(): conv.filter(bi, bimg);
В лістинзі 15.8 записані дії, необхідні для створення eфекта "размитості".
Лістинг 15.8. Створення різних эфектів
//—————————— Вставити в лістинг 15.6 ——————————————
float[] wl = { 0.11111111f, 0.11111111f, 0.11111111f, 0.11111111f, 0.11111111f, 0.11111111f, 0.11111111f, 0.11111111f, 0.11111111f };
Kernel kern = new Kernel(3, 3, wl);
ConvolveOp cop = new ConvolveOp(kern, ConvolveOp.EDGE_NO_OP, null);
cop.filter(bi, bimg) ;
//—————————— Кінець вставки ———————————————————————
На рис 15.8 представлені зліва направо початкове зображення і зображення, перетворені ваговими матрицями w1, w2 i w3, де матриця w1 показана в лістинзі 15.8, а матриці w2 i w3 виглядають так:
float[] w2 = { 0, -1, 0,-1, 4, -1, 0, -1, 0 } ;
float[] w3 = { -1, -1, -1,-1, 9, -1, -1, -1, -1 };
Рис. 15.8. Створення эфектів
15.12. Анімація
Єсть декілька способів створити анімацію. Самий простий із них — записати заздалегідь всі необхідні кадри в графічні файли, завантажити їх в оперативну память у вигляді обєктів класу Image або Bufferedlmage і виводити по черзі на экран. Це зроблено в лістинзі 15.9. Заготовлено десять кадрів у файлах run1.gif, run2.gif, , run10.gif. Вони завантажуються в масив img[] і виводяться на екран циклічно 100 раз, із затримкою в 0,1 сек.
Лiстинг 15.9. Проста анімація
