|
|
|
| Растровые изображения в Java. |
Автор: |
Источник: н/д | Язык: русский |
Вначале о модели растровых изображений в java. В java используется следующая модель представления растрового изображения: производитель - потребитель - наблюдатель и класс утилит Image. Производитель реализует интерфейс ImageProducer, потребитель - ImageConsumer, а наблюдатель - ImageObserver из пакета java.awt.image. Иллюстрацией работы этой модели может стать процесс загрузки изображения из сети. Вначале продюсер читает размеры картинки и методом void setDimension(int width, int height) передаёт потребителю размеры картинки, потом, в случае gif файла, читает таблицу цветов изображения, производитель создаёт новую таблицу цветов, роль которой выполняет IndexColorModel и методом setColorModel пересылает её потребителю. В случае jpeg файла производитель пересылает DirectColorModel потребителю тем же методом. После этого производитель информирует потребителя методом setHints, в каком порядке он будет выдавать информацию, собственно кодирующую изображение. Этот порядок может быть следующим: выдавать картинку горизонтальными линиями, в произвольном порядке, одним "куском", покадрово (в случае наличия анимации), одиночными точками или постепенно в порядке сверху-вниз, справа-налево. После установки порядка выдачи, производитель начинает методом setPixels заполнять буфер потребителя. Соответственно, в зависимости от выбора передачи изображения, это происходит мгновенно (как в случае MemoryImageSource - одного из классов, реализующего интерфейс ImageProducer) или постепенно, по мере получения информации из потока и раскодирования её, как это получается при загрузке картинки из jpeg или gif файла из сети или с диска. По завершении передачи данных, производитель вызывает метод ImageComplete. Если конец передачи данных произошел из-за ошибки, этот метод вызывается с флагом ImageConsumer.IMAGEERROR, если из-за отмены пересылки, то с флагом ImageConsumer.IMAGEABORT. При пофреймовой загрузки анимированного файла, по окончанию загрузки каждого фрейма тоже вызывается метод ImageComplete, но с флагом ImageConsumer.SINGLEFRAMEDONE. По полному завершению процесса без ошибок, выбрасывается флаг ImageConsumer.STATICIMAGEDONE. |
Доступные файлы (отрапортовать об ошибке!): |
Просмотреть
Загрузить
В портфель! (руководств: 0)
Обсудить на форуме
|
|
|
|
|