Просто информация: давайте все помним, что класс Image
на самом деле является абстрактным классом, и ссылка на переменную этого с помощью BufferedImage только сохраняет или возвращает адрес памяти любого объекта.
Кроме того, поэтому статический метод java.awt.image.imageIO
read()
возвращает объект BufferedImage
, поэтому нет сомнений, что использование оператора / выражения instanceof BufferedImage
для этого объекта вернет true
.
Фактически, будучи абстрактным, класс Image
имеет такие сигнатуры методов, как:
public abstract Graphics getGraphics()
public abstract ImageProducer getSource()
среди других.
Подчеркну, что действительная переменная Image
содержит только адрес памяти конкретного объекта подкласса Image, почти как указатели в C, C ++, Ada и т. Д.
Если вы представилисьили продвинутый в этих языках, а также в экземплярах интерфейса Java, таких как Runnable
, javax.sound.Clip
, AWT Shape
и т. д.Обратите внимание, что Image
имеет: public abstract Image getScaledInstance(...)
- вы получаете очко.(Конечно, масштабирование в программировании 2D-графики взаимозаменяемо с изменением размера, для которого желательна точность).
Но в невозможном случае, когда здесь метод ImageIO возвращает ! (instanceof BufferedImage)
, просто создайте новый объект BufferedImage
с этимImgObjNotInstncfBufImg
апассируется одному из аргументов конструктора.Затем at (рациональное) будет манипулировать этим в логике вашего кода.
В любом случае класс Affine Transform подходит для преобразования фигур и изображений в их масштабированные, повернутые, перемещенные и т. Д. Формы, поэтому я рекомендую вамизучить об использовании "аффинного преобразования".
Обратите внимание, что вы можете манипулировать фактическими пикселями в таком растре изображения, а также другом техническом жаргоне 2D-графики, на который следует ссылаться из технического глоссария, - который, возможно, потребует отработанного навыка в Java-методах двоичных слепых операцийв типах буферов изображений, которые хранят отдельные цветовые атрибуты в компактном формате по 32 байта - по 7 бит для значений альфа и RGB.
Я подозреваю, что вы собираетесь использовать его в наложении изображений.Итак, наконец, рационально то, что вы ссылаетесь только на BufferedImage
с абстрактным изображением, и если ваш Image
объект еще не является BufferedImage
, то вы можете просто сделать изображение из этого связанного, но-non-BufferedImage-instance, не беспокоясь о какой-либо конвертации, трансляции, автобоксе или чем-либо еще;манипулирование BufferedImage действительно означает манипулирование также базовым корневым объектом, несущим данные, на который он указывает.
Хорошо, закончил;Я думаю, что я, конечно, извлек и раскололся, в какой тупик вы могли подумать.Как я уже говорил, абстрактные классы в java, а также интерфейсы очень похожи на низкоуровневые операторы, более близкие к аппаратному, называемые указателями в других языках.