2013-11-28 2 views
0

Я пытаюсь написать некоторые программы, где я загружаю изображения на панель. Вот мои 5 вопросов:Java swing graphic image related related

1> Есть ли какие-либо ограничения на то, какой вид (расширение) изображений можно загрузить? Я попытался загрузить файл .bmp, он не загрузился даже после того, как я переименовал его с .jpg. Тем не менее, некоторые другие файлы, которые были с расширениями, такими как .png или .jpg, загружены.

2> Есть ли способ разрезать изображение через java для создания нового изображения. Скажем, у меня есть изображение размером 600x600 пикселей, и я хочу создать новое изображение, выбрав 200x200 пикселей от середины исходного изображения.

3> Есть ли способ изменить размер изображения?

4> Можно ли добавить изображение в прокрутку?

5> Можно ли поворачивать изображение под углом, скажем, на 30 градусов?

Все. Небольшая разработка с примерами будет приятной. Заранее спасибо.

ответ

2

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.

+0

О, у меня есть упоминание, думаю, мне придется голосовать сейчас;) – MadProgrammer

+0

Спасибо большое Мудрец. Те будут держать меня заняты на некоторое время. Один последний вопрос: 5> Можно ли поворачивать изображение под углом, скажем, на 30 градусов? – user3015246

+0

Для масштабирования вам может потребоваться прочитать [этот пример] (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