1> Есть ли какие-либо ограничения на то, что любезное (расширение) изображений может быть загружен ? Я попытался загрузить файл .bmp, он не загрузился даже после того, как я переименовал его с .jpg. Тем не менее, некоторые другие файлы, которые были с расширениями , такими как .png или .jpg, загружены.
Изображение I/O имеет встроенную поддержку для GIF, PNG, JPEG, BMP, and WBMP
. Image I/O также расширяется, так что разработчики или администраторы могут «подключаться» к поддержке дополнительных форматов. Например, плагины для TIFF и JPEG 2000 доступны отдельно.
Проверьте Reading/Loading an image обучающей страница
2> Есть ли способ, я могу вырезать изображение с помощью Java, чтобы создать новое изображение. Скажем, у меня есть изображение размером 600x600 пикселей, и я хочу создать новое изображение , выбрав 200x200 пикселей от середины оригинального изображения .
Два способа. Обрезать изображение, используя Clipping with Graphics. Но более быстрый подход - использовать метод BufferedImage.getSubimage(int x, int y, int w, int h)
.
BufferedImage image = ImageIO.read("image file");
image = image.getSubimage(50, 50, 200, 200);
Это обрежет изображение на месте (x, y) == (50, 50)
и размер 200 x 200
.
3> Есть ли способ, что я могу изменить размер изображения?
дискуссии о различный подход займет размер блога. Прочтите статью The Perils of Image.getScaledInstance()
, чтобы получить хорошее представление.
Однако быстрый подход, например: с cWidth
и cHeight
BufferedImage tmpImage = new BufferedImage(cWidth, cHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D)tmpImage.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawImage(image, 0, 0, cWidth, cHeight, null);
Существует working example сделано MadProgrammer. Также лучше использовать внешнюю библиотеку, такую как this, которая делает это хорошо.
4> Можно ли добавить изображение в прокрутку?
Непосредственное добавление не предлагается. вместо этого используйте JLabel
. Или используйте пользовательский компонент и переопределите функцию paintComponent(Graphics g)
и нарисуйте внутри нее. Есть несколько рабочих примеров с этими двумя подходами. В целом работать с JLabel
проще.
See this question answers. Mine including @MadProgrammer. И обычная роспись official tutorial страница.
5> Можно ли поворачивать изображение под углом, скажем, на 30 градусов?
Да с использованием функции Graphics2D.rotate(double theta)
; На самом деле гораздо больше вещей вы можете сделать с Graphics2D API. Рабочие примеры показаны MadProgrammer here и here.
О, у меня есть упоминание, думаю, мне придется голосовать сейчас;) – MadProgrammer
Спасибо большое Мудрец. Те будут держать меня заняты на некоторое время. Один последний вопрос: 5> Можно ли поворачивать изображение под углом, скажем, на 30 градусов? – user3015246
Для масштабирования вам может потребоваться прочитать [этот пример] (http://stackoverflow.com/questions/11959758/java-maintaining-aspect-ratio-of-jpanel-background-image/11959928#11959928). Вам также может понравиться прочитать [The Perils of Image.getScaledInstance()] (https://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html) – MadProgrammer