Если класс, в который вы звоните Graphics.drawImage(Image, int, int, int, int, ImageObserver)
, не является ImageObserver
, использование this
в качестве аргумента для ImageObserver
не будет работать:
class MyClass {
public void resizeImage() {
Graphics g = getGraphicsObjectFromSomewhere();
// The following line will not compile, as `MyClass`
// does not implement `ImageObserver`.
g.drawImage(img, 0, 0, 50, 50, this);
}
}
Если вы изменяете размер изображения, для которого не требуется ImageObserver
(например, BufferedImage
, которое уже содержит изображение, которое вы хотите изменить), то вы можете простоПередайте null
:
// The image we want to resize
BufferedImage img = ImageIO.read("some-image.jpg");
// The Graphics object of the destination
// -- this will probably just be obtained from the destination image.
Graphics g = getGraphicsObjectFromSomewhere();
// Perform the resizing. Hand a `null` for the ImageObserver,
// as we don't need one.
g.drawImage(img, 0, 0, 50, 50, null);
Тем не менее, я собираюсь добавить небольшой штекер для библиотеки изменения размера изображения Thumbnailator .
Если всетребуется изменить размер изображения. Для этого достаточно выполнить следующий код:
Thumbnails.of("path/to/image")
.size(100, 100)
.toFile("path/to/thumbnail");
Thumbnailator достаточно гибок, чтобы принимать BufferedImage
с, File
с и InputStream
с.
Видя ваши изменения, я бы предложил изменить класс Hitter
, чтобы он выполнял изменение размера изображения в конструкторе.
Поскольку вывызывая метод drawHitter
при каждом вызове из Applet.drawImage
, операция изменения размера с использованием Graphics.drawImage
вызывается много раз, даже еслиe hitterWidth
и hitterHeight
, для всех намерений и целей, являются константами.
Изменение размера Image
заранее и рисование изображения с предварительно измененным размером в методе drawHitter
будет более эффективным.