Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

Java: ПримерыРабота с ImageSource картинок, загружаемых из сети

Работа с ImageSource картинок, загружаемых из сети

При работе с картинками (класс Image) иногда возникает соблазн ка-то её обработать - но вот незадача: при обработки картинуи имеющей удалённый источник (ImageSource), работа сильно замедляется - картинка каждый раз обновляется, а так как источник удалёный, то это обновление занимает время...

Для решения этой проблемы картинка грабится в память, а затем с ней можно делать всё, что угодно...


// Получаем картинку из интернета (функция из апплета, 
// получить картинку из сети по ip можно и другими методами)
Image img_in = getImage(getCodeBase(),"image.jpg");
// создаеём объект MediaTracker, чтобы загрузить картинку полностью
MediaTracker mt.addImage(img_in, 0); 
try
{
 // Ждём, пока картинка загрузится полностью, если неважно, 
 // насклько загрузится картинка, а важно время, можно использоват mt.waitForID(0, time); 
 // где time - время в миллисекундах максимального ожидания загрузки
 mt.waitForID(0);
}
 // игнорируем все ошибки загрузки
catch(Exception e){}
// всё, объект больше не нужен
mt.removeImage(img_in);

// получаем размеры картинок
int w = img_in.getWidth(this), h = img_in.getHeight(this);

 // создаём объект, в который будем грабить, после завершения грабления, 
 //в  этом массиве останится карта картинки, где каждый этлемент обозначает 
 // точку в формате argb (alpha, red, green, blue)
int image = new int[w*h+1];

 // процес грабления
PixelGrabber pg = new PixelGrabber(img_in, 0, 0, w, h, image, 0, w);
try
{
	pg.grabPixels();
}
catch(Exception e){} //.. завершили процесс

// создаём новую картинку, теперь вся она - в памяти компьютера
Image img_out = createImage(new MemoryImageSource(w, h, image, 0, w)); 

Примечание:

Создать картинку из массива image можно успеть всегда, иногда можно обработать картинку, не прибегая к классу ImageFilter, для этого нужно просто знать 3 вещи.

Точка картинки с координатами x,y в массиве image доступна как image[y*w+x], а по argb можно эту точку разложить следующим образом:

если c - int значение точки из массива image, то


int a = (c & 0xff000000)>>24;		
int r = (c & 0xff0000)>>16;
int g = (c & 0xff00)>>8;
int b = (c & 0xff);

где они все - значения соответствующих компонент, а свернуть это всё обратно можно, следующей функцией:


с = setRGB(a,r,g,b);

protected int setRGB(int a, int  r, int  g, int  b)
{
	a = a & 0xff;
	r = r & 0xff;
	g = g & 0xff;
	b = b & 0xff;
	
	return ((a << 24) | ((r << 16) | ((g << 8) | b)));
}

Автор: YmI aka iKot


Аллен Вайк, Джейсон Джиллиам
"JavaScript. Полное руководство"
Подробнее>>
Заказать>>


Е. Е. Аккуратов
"Знакомьтесь: Java. Самоучитель"
Подробнее>>
Заказать>>

Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!