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 编写的图片查看器,可以现则图片浏览,
Java图片查看器源码,实现简单的移动、缩小、放大、旋转功能 package tp1; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.filechooser....
java图片查看,主要功能是选择文件,保存文件,对图片的放大,缩小,旋转操作。
这是我自己编的Java小程序,是一个关于图片查看的小程序~~~~
Java实现对图片的查看器,可以实现的,运行也没有错误的。
简单的Java图片查看器,可以实现打开图片上一张下一张另存为放大缩小
这是一个相当完善的查看图片工具,可以单击按钮上一张、下一张查看图片,也可以像播放幻灯片那样自动播放图片
java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java图片浏览器java...
java图片生成器
利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据...
struts2 上传 java 图片水印 改变图片大小
一个简单的java图片浏览器,希望对你有所帮助!
在java中通过ImageMagick安装包和im4java.jar把其他格式图片如pdf转换为PNG,JPEG等常用格式图片之间的相互转换。转换效率还可以。内有安装操作步骤及编码内容。亲测有效。 场景运用:在前端图片格式上传中,需要在...
java图片裁剪技术
这是一个java生成随即图片验证码,java图片压缩,java图片水印 ,java图片裁剪 ,java图片旋转 ,java图片放大缩小等工具类,里面有测试方法,欢迎使用!
java图片缩放 java缩略图 缩略图 java图片处理
java 图片添加水印 图片叠加文字类 图片生成方法,如果需要在已有的图片叠加文字
java图片验证。有源码。制作java图片验证
选择图片,拼接图片,Java拼接多张图片,连接在一起 代码程序。
java 对图片操作的工具类, 对图片进行剪裁 重置图片大小 按倍率缩小图片 对图片裁剪,并把裁剪新图片保存