Создание изображения из массива данных
Для создания обьекта Image можно использовать метод MemoryImageSource . Для этого в качестве входной информации используется целочисленный массив. Каждый элемент массива описывает один пиксель в стандартной цветовой модели RGB. Изображение, передаваемое пикселем, представляется в виде целого числа, которое в шестнадцатеричном виде строится следующим образом : 0xAARRGGBB, где:
- AA - степень прозрачности пикселя от 0 (полная непрозрачность)до 255 (полная прозрачность),
- RR - красная составляющая,
- GG - зеленая составляющая,
- BB - голубая составляющая.
Метод имеет следующий вид :
MemoryImageSource (int ширина , int высота, int maссив, int смещение , int строка);
где:
- ширина - ширина изображения,
- длина - длина изображения,
- массив - массив числовых данных, из которых строится изображение,
- смещение - точка отсчета в массиве данных, с которой начинается считывание данных (обычно смещение = 0),
- строка - ширина строки, выбираемая из массива (обычно, строка = ширина).
В следующем примере изображение создается с помощью массива узоров (Автор - Gerald J. Holzmann).
//------------------------------------------------------------
// Program : MyForthImage
//------------------------------------------------------------
// Author : Katz Yakov
//------------------------------------------------------------
// Date : 31/01/98
//------------------------------------------------------------
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
//------------------------------------------------------------
// Создание класса MyForthImage
public class MyForthImage extends Applet{
// Обьявление обьекта класса Image
Image img;
// Обьявление и определение значение фильтра
int filter = 255;
// Ширина изображения
int XMax = 256;
// Высота изображения
int YMax = 256;
// Начальные действия
public void init() {
// Определение массива пикселей
int pixels[] = new int [XMax * YMax];
// Переменная для массива пикселей
int i = 0;
// Заполнение массива пикселей
for (int y = 0; y < YMax; y++) {
for (int x = 0; x < XMax; x++) {
int r = (x^y)&0xff;
int g = (x*2^y*2)&0xff;
int b = (x*4^y*4)&0xff;
// Построение пикселя по принципу AARRGGBB
pixels[i++] = (filter << 24 ) |
(r << 16 ) |
(g << 8 ) | b;
}
}
// Создание изображения
img = createImage(new
MemoryImageSource(XMax, YMax, pixels, 0, XMax));
}
// Вывод изображения в окно апплета
public void paint(Graphics gr) {
gr.drawImage(img, 0, 0, this);
}
}
Апплет выглядит следующим образом: