2015-09-05 3 views
5

Класс Java BufferedImage имеет длинный список переменных класса, известный как тип изображения, который может использоваться в качестве аргумента для конструктора BufferedImage.Как решить, какой тип изображения BufferedImage использовать?

Однако документы Java дали минимальное объяснение, для чего используются эти типы изображений, и как это повлияет на создаваемый BufferedImage.

Мой вопрос:

  1. Как тип изображения влияет на BufferedImage будет создан? Контролирует ли оно количество бит, используемых для хранения различных цветов (красный, зеленый, синий) и прозрачность?

  2. Какой тип изображения следует использовать, если мы просто хотим, чтобы создать

    • непрозрачного изображение
    • прозрачное изображение
    • полупрозрачное изображение

Я прочитал описание в Java Doc много раз, но просто не мог понять, как мы должны его использовать. Например, этот:

TYPE_INT_BGR

Представляет изображение с 8-битными RGB цветовых компонентов, что соответствует Windows- или Solaris- стиле BGR цветовой модели, с цветами синий, зеленый, и Красный упакован в целые пиксели. Альфа нет. Изображение имеет DirectColorModel. Когда данные с непрозрачной альфа-памятью хранятся в изображении этого типа, данные цвета должны быть скорректированы на непремутированную форму и альфа-версию, как описано в документации AlphaComposite.

+0

Что такое полупрозрачное изображение? Как это отличается от прозрачного изображения? –

+0

@AndyTurner Я помню, что я где-то читал о том, чтобы сделать части изображения прозрачными, а полупрозрачные - на настройке непрозрачности всего изображения. Например, gif-файл обеспечивает прозрачность, но не прозрачность, в то время как файлы png поддерживают оба. Это пример, когда нужно использовать другой тип изображения. Нет? – user3437460

ответ

6

Если вы не имеете специфические требования (например экономии памяти или сохранения вычислений или конкретного нативный формат пикселей) просто идти с по умолчанию TYPE_INT_ARGB, который имеет 8 бит на канал, 3 канала + альфа.

Пропуск альфа-канала при работе с 8 бит на канал не влияет на общую память, занимаемую изображением, так как каждый пиксель будет упакован в int в любом случае, поэтому 8 бит будут отброшены.

В основном у вас есть:

  • TYPE_INT_ARGB, 4 байта на пиксель с альфа-каналом
  • TYPE_INT_ARGB_PRE, 4 байта на пиксель, то же самое, как и раньше, но цвета уже умножены на альфа пикселя, чтобы сохранить вычисления
  • TYPE_INT_RGB, 4 байта на пиксель без альфа-канала
  • TYPE_USHORT_555_RGB и TYPE_USHORT_565_RGB, 2 байта на пиксель, гораздо меньше цветов, не нужно использовать его UNL у вас есть ограничения памяти

Тогда есть все одинаковые форматы с обмениваемыми каналами (например. BGR вместо этого RGB). Вы должны выбрать тот, кто является родным для вашей платформы, чтобы было меньше преобразований.

+0

спасибо за ваш быстрый ответ. Поэтому я могу просто использовать 'TYPE_InT_ARGB' для непрозрачного, прозрачного и полупрозрачного изображения, если у меня нет других особых потребностей, упомянутых вами? – user3437460

+0

Да, полупрозрачное изображение не является полупрозрачным как таковое (если все пиксели не имеют альфа). Вы можете получить полупрозрачность, рисуя изображение с альфа-смешением над фреймбуфером назначения. – Jack

+0

И так долго тип изображения поддерживает альфа-канал, он сможет поддерживать прозрачность, я прав, говоря это? Это мой последний вопрос! : D – user3437460

Смежные вопросы