import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*支持拖拽放大,鼠标滚轮放大缩小
*/
public class ShowImageDialog extends JDialog {
private BufferedImage image = null;
JPanel panel = null;
private int difference = 0;
public ShowImageDialog(JFrame frame, BufferedImage image) {
super(frame, true);
setTitle("查看图片");
this.image = image;
setSize(800, 600);
init();
difference = getHeight() - panel.getHeight();
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
formMouseClicked(evt);
}
});
this.addMouseWheelListener(new java.awt.event.MouseWheelListener() {
public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
formMouseWheelMoved(evt);
}
});
}
private void init() {
getContentPane().setLayout(new java.awt.FlowLayout());
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
panel = new ImgPanel();
if (image.getWidth() < getWidth() && image.getHeight() < getHeight()) {
this.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
panel.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
} else {
int height = getImageHeight(this.getWidth());
this.setSize(new Dimension(800, height));
panel.setPreferredSize(new Dimension(800, height));
}
this.add(panel);
pack();
}
private void formMouseClicked(java.awt.event.MouseEvent evt) {
if (evt.getClickCount() >= 2) {
this.dispose();
}
}
private void formMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
int dir = evt.getWheelRotation();
if (dir == 1) {
int height = getImageHeight(getWidth() - 10);
this.setSize(new Dimension(getWidth() - 10, height));
this.paint(getGraphics());
} else if (dir == -1) {
int height = getImageHeight(getWidth() + 10);
this.setSize(new Dimension(getWidth() + 10, height));
this.paint(getGraphics());
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
panel.setPreferredSize(new Dimension(getWidth(), getHeight() - difference));
}
public class ImgPanel extends JPanel {
private boolean ampl = false;
private int x;
private int y;
private int i_width;
private int i_height;
public ImgPanel() {
i_width = image.getWidth();
i_height = image.getHeight();
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
panelMousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
panelMouseReleased(evt);
}
});
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
panelMouseDragged(evt);
}
});
}
@Override
public void paint(Graphics g) {
if (i_width <= getWidth() && i_height <= getHeight()) {
g.drawImage(image, 0, 0, this);
} else {
if (ampl) {
g.drawImage(image.getSubimage(getImageX(getWidth(), x), getImageY(getHeight(), y), getWidth(), getHeight()), 0, 0, getWidth(), getHeight(), this);
} else {
int width = getWidth();
int height = getImageHeight(panel.getWidth());
g.drawImage(image, 0, 0, width, height, this);
}
}
}
private void panelMousePressed(java.awt.event.MouseEvent evt) {
ampl = true;
x = evt.getX();
y = evt.getY();
paint(this.getGraphics());
}
private void panelMouseReleased(java.awt.event.MouseEvent evt) {
ampl = false;
paint(this.getGraphics());
}
private void panelMouseDragged(java.awt.event.MouseEvent evt) {
x = evt.getX();
y = evt.getY();
if (ampl) {
paint(this.getGraphics());
}
}
private int getImageX(int w_width, int m_x) {
int i_x = 0;
float f = i_width;
if (m_x > w_width) {
m_x = w_width;
}
i_x = (int) ((f / w_width) * m_x - m_x);
if (i_x < 0) {
i_x = 0;
}
return i_x;
}
private int getImageY(int w_height, int m_y) {
int i_y = 0;
float f = i_height;
if (m_y > w_height) {
m_y = w_height;
}
i_y = (int) ((f / w_height) * m_y - m_y);
if (i_y < 0) {
i_y = 0;
}
return i_y;
}
}
private int getImageHeight(int width) {
int imageHeight = 0;
double f = image.getWidth();
double x = f / width;
imageHeight = (int) (image.getHeight() / x);
return imageHeight;
}
}
分享到:
相关推荐
总的来说,这个Java图片查看器项目涵盖了GUI设计、文件I/O、图像处理等多个Java编程的核心概念,对于学习和理解Java图形编程非常有帮助。通过分析和研究这个项目,开发者可以提升自己在Java GUI开发、图像处理等方面...
java图片查看,主要功能是选择文件,保存文件,对图片的放大,缩小,旋转操作。
Java图片查看器源码,实现简单的移动、缩小、放大、旋转功能 package tp1; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.filechooser....
【Java图片查看器】是一种基于Java编程语言实现的软件应用,用于查看和浏览图像文件。在Java中,图片查看器的开发涉及到多个核心概念和技术,包括文件I/O操作、图像处理以及用户界面设计。以下是对这个项目的详细...
【图片查看器(JAVA版)】是一款基于Java编程语言开发的图像浏览软件,它提供了方便快捷的方式来查看和管理个人电脑中的图片。这款软件的核心功能包括单张图片浏览、连续滚动查看以及幻灯片式自动播放,极大地提升了...
通过以上这些知识点,你可以开始着手构建一个简单的Java图片查看器。虽然描述中提到的功能可能比较基础,但理解并实现这些核心概念将为你在Java GUI编程领域打下坚实的基础。同时,随着技能的提升,你可以进一步优化...
总结来说,这个Java图片查看器项目涵盖了以下几个关键点: 1. Java编程基础:包括类、对象、接口、方法等概念。 2. 用户界面设计:可能使用了Swing或JavaFX库创建图形用户界面。 3. 图像处理:通过`MyFilter`类实现...
简单的Java图片查看器,可以实现打开图片上一张下一张另存为放大缩小
Java图片浏览管理系统是一款基于Java开发的简易应用,旨在帮助用户方便地查看和管理他们的图片集合。这个系统可能包含了文件浏览器组件、图片预览功能、以及一些基本的图片操作选项,如旋转、缩放等。下面将详细介绍...
Java图片生成器是一种基于Java编程语言的工具,用于创建、编辑或转换图像文件。这个工具可能包含各种功能,如绘制图形、添加文字、处理图像效果、读取和写入不同图像格式等。在Java中实现图片生成器涉及到对Java 2D ...
利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据...
在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...
在标签中,作者列出了四个关键词:“java 处理图片背景颜色”、“java 图片背景颜色替换”、“java 图片背景颜色更改”、“java 蓝底寸照批量转换为白底”,这些关键词都与 Java 处理图片背景颜色相关。 在部分内容...
总的来说,这个Java图片浏览器项目体现了面向对象编程的原则,结合了文件I/O、GUI设计和图片处理技术,展示了Java在开发桌面应用程序方面的强大能力。同时,其优化的内存管理策略使得该应用能够适应各种规模的图片...
"java 图片生成缩略图" Java 图片生成缩略图是Java程序开发中一个常见的需求,通过将图片以缩略图形式展示,可以提高用户体验和网站性能。在本文中,我们将介绍使用Java生成缩略图的方法。 缩略图生成方法 在 ...
本项目是一个基于Swing的简单图片查看器,名为"Viewer.jar",它可以帮助用户浏览和查看图片文件。 Swing是Java Foundation Classes (JFC) 的一部分,它提供了丰富的组件集,如按钮、文本框、滚动面板等,用于构建...
这个功能允许用户在上传图片之前查看其效果,确保上传的图片符合预期。以下将详细介绍如何在Java环境中,结合ASP和JSP技术来实现这一功能。 首先,我们需要理解图片上传的基本流程。用户通过浏览器选择图片后,这些...
本篇文章将详细探讨如何使用Java实现图片到视频的转换。 首先,我们需要理解Java中的关键库,如Java Advanced Imaging (JAI) 和 Java Media Framework (JMF)。JAI主要用于图像处理和分析,而JMF则用于媒体播放和...
在java中通过ImageMagick安装包和im4java.jar把其他格式图片如pdf转换为PNG,JPEG等常用格式图片之间的相互转换。转换效率还可以。内有安装操作步骤及编码内容。亲测有效。 场景运用:在前端图片格式上传中,需要在...
这是一个java生成随即图片验证码,java图片压缩,java图片水印 ,java图片裁剪 ,java图片旋转 ,java图片放大缩小等工具类,里面有测试方法,欢迎使用!