Урок 18. Работа с изображениями в Java
Java работает с наиболее популярными во Всемирной паутинеформатами изображений — JPEG и GIF. JPEG лучше подходит для естественных цветныхизображений, таких, как фотографии, а формат GIF является наилучшими дляграфических эмблем, изображений кнопок, и т.п.
Сначала мы загрузим изображение с помощью очень короткойпрограммы. Затем мы научимся использовать классы, которые управляют загрузкойодного или нескольких изображений. Кроме того, существует набор абстрактныхклассов, которые помогают создать поток изображений, и фильтры, позволяющиеобращаться к отдельным элементам изображений и модифицироватьих.
Простой загрузчик изображений
Простейший случай — загрузка в страницу одиночного изображения.Вот маленький апплет, выполняющий эту работу:
/* <-title>-SimpleImageLoad<-/title>-
*<-applet code=»SimpleImageLoad» width=300 height=150>-
* <-param name=»img» value=»mupk.gif»>-
* <-/applet>-
*/
import java.applet.*-
import java.awt.*-
public class SimpleImageLoad extends Applet {
Image art-
public void init() {
art = getImage(getDocumentBase(), getParameter(«img»))-
}
public void paint(Graphics g) {
g.drawImage(art, 0, 0, this)-
} }
Метод paint использует drawlmage с четырьмя аргументами: этоссылка на изображение art, координаты левого верхнего угла рисунка х, у и объекттипа ImageObserver. Мы поговорим подробнее об ImageObserver в следующемпараграфе- здесь мы использовали this в качестве имени ImageObserver, поскольку он встроен вапплет. Когда этот апплет запускается, он в методе init начинает загрузку art.Процесс загрузки изображения по сети хорошо заметен – SimpleImageLoad.html, поскольку встроенный интерфейс ImageObserver вызываетпроцедуру paint при каждом поступлении новой порции данных из сети. Вы можетеиспользовать ImageObserver для отслеживания загрузки изображения, а в это времявыводить на экран другую информацию.
ImageObserver
ImageObserver — это абстрактный интерфейс, используемый дляполучения сообщения о создании изображения, Метод imageUpdate из ImageObserver —это все, что вы должны реализовать в своем апплете для его использования. В товремя, как вы получаете информацию о загрузке, вы можете показывать любуюпонравившуюся вам мультипликацию, индикатор степени завершения загрузки илилюбую другую заставку. Для использования ImageObserver в своем подклассе Appletвы должны добавить в него строку implement ImageObserver, как показано в этомфрагменте программы:
public class MyApplet extends Applet implement ImageObserver{
Затем вам придется вставить в свой класс метод imageUpdate для интерфейсаImageObserver, как показано в следующем фрагменте :
public boolean imageUpdate(Image img, int status,
int x, int у int width, int height) {
if((status &- ALLBITS) != 1) {
System.out.println(«Still processing the image»)-
return true-
}
else {
System.out.println(«Done processing the image»)-
return false-
} }
Метод imageUpdate вызывается с изображением Image, котороенаходится в процессе изменения, целым параметром status, отражающим состояниеизменения, и с координатами прямоугольника (x, у, width, height), которыесоответствуют различным величинам в зависимости от информационных флагов,перечисленных ниже. ImageUpdate должен возвращать false по окончании загрузкиизображения и true — если изображение еще обрабатывается.
Целая переменная status поразрядно проверяется на наличиеодного или нескольких флагов. Возможные флаги и информация, которую они несут,перечислены ниже:
WIDTH
|
Ширина изображения доступна и может быть взята из аргументаwidth.
|