`
qqt31
  • 浏览: 2572 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

Java 图片查看

 
阅读更多

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图片查看器项目涵盖了GUI设计、文件I/O、图像处理等多个Java编程的核心概念,对于学习和理解Java图形编程非常有帮助。通过分析和研究这个项目,开发者可以提升自己在Java GUI开发、图像处理等方面...

    java图片查看器,选择打开,保存,放大,缩小,旋转,切换上一张和下一张

    java图片查看,主要功能是选择文件,保存文件,对图片的放大,缩小,旋转操作。

    Java图片查看器 源代码

    Java图片查看器源码,实现简单的移动、缩小、放大、旋转功能 package tp1; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import javax.swing.filechooser....

    Java-tupianchakanqi.rar_JAVA图片查看器

    【Java图片查看器】是一种基于Java编程语言实现的软件应用,用于查看和浏览图像文件。在Java中,图片查看器的开发涉及到多个核心概念和技术,包括文件I/O操作、图像处理以及用户界面设计。以下是对这个项目的详细...

    图片查看器(JAVA版)

    【图片查看器(JAVA版)】是一款基于Java编程语言开发的图像浏览软件,它提供了方便快捷的方式来查看和管理个人电脑中的图片。这款软件的核心功能包括单张图片浏览、连续滚动查看以及幻灯片式自动播放,极大地提升了...

    用java语言写的一个简单的图片查看器

    通过以上这些知识点,你可以开始着手构建一个简单的Java图片查看器。虽然描述中提到的功能可能比较基础,但理解并实现这些核心概念将为你在Java GUI编程领域打下坚实的基础。同时,随着技能的提升,你可以进一步优化...

    一个由java编写的图片查看器

    总结来说,这个Java图片查看器项目涵盖了以下几个关键点: 1. Java编程基础:包括类、对象、接口、方法等概念。 2. 用户界面设计:可能使用了Swing或JavaFX库创建图形用户界面。 3. 图像处理:通过`MyFilter`类实现...

    简单的图片查看器

    简单的Java图片查看器,可以实现打开图片上一张下一张另存为放大缩小

    java图片浏览管理系统

    Java图片浏览管理系统是一款基于Java开发的简易应用,旨在帮助用户方便地查看和管理他们的图片集合。这个系统可能包含了文件浏览器组件、图片预览功能、以及一些基本的图片操作选项,如旋转、缩放等。下面将详细介绍...

    java图片生成器

    Java图片生成器是一种基于Java编程语言的工具,用于创建、编辑或转换图像文件。这个工具可能包含各种功能,如绘制图形、添加文字、处理图像效果、读取和写入不同图像格式等。在Java中实现图片生成器涉及到对Java 2D ...

    java自动识别图片中的二维码

    利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据利用java自动识别图片中的二维码并解析二维码中的数据...

    java 图片水印 改变图片大小

    在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...

    java处理图片背景颜色的方法

    在标签中,作者列出了四个关键词:“java 处理图片背景颜色”、“java 图片背景颜色替换”、“java 图片背景颜色更改”、“java 蓝底寸照批量转换为白底”,这些关键词都与 Java 处理图片背景颜色相关。 在部分内容...

    java编写的图片浏览器

    总的来说,这个Java图片浏览器项目体现了面向对象编程的原则,结合了文件I/O、GUI设计和图片处理技术,展示了Java在开发桌面应用程序方面的强大能力。同时,其优化的内存管理策略使得该应用能够适应各种规模的图片...

    java 图片生成缩略图

    "java 图片生成缩略图" Java 图片生成缩略图是Java程序开发中一个常见的需求,通过将图片以缩略图形式展示,可以提高用户体验和网站性能。在本文中,我们将介绍使用Java生成缩略图的方法。 缩略图生成方法 在 ...

    图片查看器java源码

    本项目是一个基于Swing的简单图片查看器,名为"Viewer.jar",它可以帮助用户浏览和查看图片文件。 Swing是Java Foundation Classes (JFC) 的一部分,它提供了丰富的组件集,如按钮、文本框、滚动面板等,用于构建...

    java实现图片上传预览

    这个功能允许用户在上传图片之前查看其效果,确保上传的图片符合预期。以下将详细介绍如何在Java环境中,结合ASP和JSP技术来实现这一功能。 首先,我们需要理解图片上传的基本流程。用户通过浏览器选择图片后,这些...

    java实现图片转换为视频

    本篇文章将详细探讨如何使用Java实现图片到视频的转换。 首先,我们需要理解Java中的关键库,如Java Advanced Imaging (JAI) 和 Java Media Framework (JMF)。JAI主要用于图像处理和分析,而JMF则用于媒体播放和...

    Java实现pdf格式图片转换

    在java中通过ImageMagick安装包和im4java.jar把其他格式图片如pdf转换为PNG,JPEG等常用格式图片之间的相互转换。转换效率还可以。内有安装操作步骤及编码内容。亲测有效。 场景运用:在前端图片格式上传中,需要在...

    java图片处理类

    这是一个java生成随即图片验证码,java图片压缩,java图片水印 ,java图片裁剪 ,java图片旋转 ,java图片放大缩小等工具类,里面有测试方法,欢迎使用!

Global site tag (gtag.js) - Google Analytics