`
斌强-朱
  • 浏览: 51455 次
社区版块
存档分类
最新评论

图片查看器

 
阅读更多



package org.view4;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class ImageView {
	
	private static JLabel lab = new JLabel();
	private static JFrame frame ;//= new JFrame();
	private static JPanel pan = new JPanel();
	private static JButton previous = new JButton("<===");
	private static JButton next = new JButton("===>");
	private static ArrayList<File> imageList;
	private static int len = 0;
	private static int point = 0;
	
	public static void init(){
		if(frame == null){
			frame = new JFrame();
			Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
			double width = dimension.getWidth()*0.8;
			double height = dimension.getHeight()*0.8;			
			frame.setBounds((int)(width*0.1), (int)(height*0.1), (int)width, (int)height);
			previous.setPreferredSize(new Dimension(150, 30));
			next.setPreferredSize(new Dimension(150, 30));			
			
			frame.add(lab, BorderLayout.CENTER);
			pan.add(previous);
			pan.add(next);
			frame.add(pan, BorderLayout.SOUTH);
			frame.setFocusable(true);
			frame.setVisible(true);
			
			addListen();
		}else{
			frame.setVisible(true);
		}
		
	}
	
	private static void addListen(){
		frame.addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent arg0) {
				
			}
			
			@Override
			public void windowIconified(WindowEvent arg0) {
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent arg0) {
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent arg0) {
				
			}
			
			@Override
			public void windowClosing(WindowEvent arg0) {
				lab.setIcon(null);
				frame = null;
				System.gc();
			}
			
			@Override
			public void windowClosed(WindowEvent arg0) {
				
			}
			
			@Override
			public void windowActivated(WindowEvent arg0) {
				
			}
		});
		
		frame.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent e) {
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				
				if(e.getKeyCode() == KeyEvent.VK_RIGHT){
					showNextPhoto();
				}else if(e.getKeyCode() == KeyEvent.VK_LEFT){
					showPreviousPhoto();
				}
				frame.requestFocus();
			}

		});
		
		previous.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				showPreviousPhoto();
				frame.requestFocus();
			}
		});
		
		next.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				showNextPhoto();
				frame.requestFocus();
			}
		});
	}
	
	private static void showPreviousPhoto(){
		
		if(point <= 0){
			point = len - 1;
		}else{
			point--;
		}
		
		show(point);
//		System.out.println("Previous point:"+(point+1));
	}
	
	private static void showNextPhoto(){
		
		if(point >= len-1){
			point = 0;
		}else{
			point++;
		}
		
		show(point);
//		System.out.println("Next point:" + (point+1));
	}
	
	public static void showImage(){
		init();
		show(0);
	}
	
	
	public static void showImage(ArrayList<File> list, String i){
		init();
		imageList = list;
		len = imageList.size();		
		point = Integer.parseInt(i); 
		show(point);
	}
	
	
	private static void show(int i){
		
		BufferedImage image;
		try {
			image = ImageIO.read(imageList.get(i));
//			System.out.println(imageList.get(point).getAbsolutePath());
			lab.setIcon(new ImageIcon(image));
			lab.setHorizontalAlignment(JLabel.CENTER);
			frame.setTitle(imageList.get(point).getAbsolutePath().toString());
//			frame.setTitle((1+i) + "");
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Error");
			e.printStackTrace();
		}
	}
	
	public static void show(File file){
		
		BufferedImage image;
		try {
			image = ImageIO.read(file);
			lab.setIcon(new ImageIcon(image));
			lab.setHorizontalAlignment(JLabel.CENTER);
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Error");
			e.printStackTrace();
		}
	}	
	
	public static void hidden(){
		if(frame != null){
			frame.setVisible(false);
		}
	}
	
//	public static void main(String[] args) {
//		File file = new File("./image/");//               ./image/bg2.jpg
//		System.out.println(file.exists() + "--------"+ file.getAbsolutePath());
//		ImageView.showImage(file);
//	}

}



package org.view4;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class View {
	
	private JFrame frame;
	private JButton but;
	private JTextField field;
	private File filePath ;
	private ArrayList<File> imageFileList;
	private ShowImage showImage = new ShowImage();
	
	public View(){
		this.frame = new JFrame("Photo View");
		this.but = new JButton("Browse");
		this.field = new JTextField(45);
		this.field.setEditable(false);
		
		
		init();
		Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
		double width = dimension.getWidth()*0.8;
		double height = dimension.getHeight()*0.8;
		
		this.frame.setBounds((int)(width*0.1), (int)(height*0.1), (int)width, (int)height);
		this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.frame.setVisible(true);
		imageFileList = new ArrayList<File>();
		addListen();
	}
	
	private void init(){
		JPanel pan1 = new JPanel();
		pan1.add(this.field, BorderLayout.WEST);
		pan1.add(this.but, BorderLayout.EAST);
		
		this.frame.add(pan1, BorderLayout.NORTH);
//		this.frame.pack();
	}
	
	class ShowImage {
//		int imageLength = imageFileList.size();
		private JPanel pan = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20));
		private JScrollPane scr = new JScrollPane();
		private BufferedImage[] images;
		private ImageIcon[] icons;
		JLabel[] labs;
		
		private int count = 0;
		
		public void removeAll(){
			if(labs != null){
				for(int i=0;i<count;i++){
					pan.remove(labs[i]);
					labs[i] = null;
				}
			}
			
			System.gc();
		}
		
		public void run() {
			try {
				
				int length = imageFileList.size();
				count = length ;
				images = new BufferedImage[length];
				icons = new ImageIcon[length]; 
				labs = new JLabel[length];
//				Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
//				double w = dimension.getWidth();
//				double h = dimension.getHeight();
				
				int w = frame.getWidth();
//				int h = frame.getHeight();
				
				int w2 = (int)(w/140)*140;
				int h2 = (length/(int)(w/140)*140);	
				pan.setPreferredSize(new Dimension(w2, h2));
				
				
				for(int i=0; i<length; i++){
					
					images[i] = ImageIO.read(imageFileList.get(i));
					
					int width = 100;
					int height = 100;
					double scaleWidth = (double)width / (double)images[i].getWidth();
					double scaleHeight = (double) height / (double) images[i].getHeight();
					
					BufferedImage dstImage = new BufferedImage(width, height, images[i].getType());
					
					AffineTransform affine = new AffineTransform();
					affine.scale(scaleWidth, scaleHeight);
					
					AffineTransformOp affop = new AffineTransformOp(affine, AffineTransformOp.TYPE_BILINEAR);
					affop.filter(images[i], dstImage);
					
					icons[i] = new ImageIcon(dstImage);
					
					
					labs[i] = new JLabel(); 
					labs[i].setIcon(icons[i]);
					labs[i].setHorizontalTextPosition(JLabel.CENTER);
					labs[i].setCursor(new Cursor(Cursor.HAND_CURSOR));
					labs[i].addMouseListener(new MouseListen());
					labs[i].setName(String.valueOf(i));
//					labs[i].setPreferredSize(new Dimension(100, 100));
					
					pan.add(labs[i]);
//					System.out.println("width:"+ icons[i].getIconWidth() + "height:" +icons[i].getIconHeight());
				}
				
//				pan.setPreferredSize(new Dimension(300, 300));
//				pan.setSize(550, 600);

				scr.setViewportView(pan);
				scr.setPreferredSize(new Dimension(300, 300));
				
//				pan.setForeground(Color.BLUE);
				
				frame.add(scr, BorderLayout.CENTER);
//				frame.pack();
				frame.setVisible(true);
				
			} catch (IOException e1) {
				e1.printStackTrace();
				JOptionPane.showMessageDialog(null, "Error");
			} catch(Exception e3){
				e3.printStackTrace();
				JOptionPane.showMessageDialog(null, "Error");
			}
		}
		
		class MouseListen extends MouseAdapter{
			@Override
			public void mouseClicked(MouseEvent e) {
				
				JLabel temp = (JLabel)e.getSource();
				ImageView.showImage(imageFileList, temp.getName());
			}
		}
		
	}
	
	private void addListen(){
		this.but.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
			    JFileChooser chooser = new JFileChooser(new File("."));
			    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
			    int returnVal = chooser.showOpenDialog(frame);
			    if(returnVal == JFileChooser.APPROVE_OPTION) {
			       filePath = chooser.getSelectedFile().getAbsoluteFile();
			       if(filePath == null){
			    	   return;
			       }
			       
			       imageFileList.clear();
			       
			       for(File f : filePath.listFiles()){
			    	   if(f.getName().endsWith(".jpg")||f.getName().endsWith(".gif")
			    			   ||f.getName().endsWith(".png")){
			    		   imageFileList.add(f);
			    	   }
			       }
			       
			       if(imageFileList.size() == 0){
			    	   JOptionPane.showMessageDialog(null, "There is no format jpg/gif/png photos!");
			    	   return;
			       }
			       
			       field.setText(filePath.toString());
			       ImageView.hidden();
			       showImage.removeAll();
			       showImage.run();
			    }
			    
			}
		});
	}
	
	public static void main(String[] args) {
		new View();
	}

}






分享到:
评论

相关推荐

    Win10图片查看器bat、win7图片查看器

    标题中的“Win10图片查看器bat”和“win7图片查看器”指的是在Windows操作系统中用于查看和可能编辑图片的应用程序。Windows 10图片查看器是Microsoft为该操作系统提供的一个内置工具,它允许用户方便地浏览和管理...

    WIN7 WIN10图片查看器

    标题“WIN7 WIN10图片查看器”指的是针对Windows 7和Windows 10操作系统中可能出现的图片查看问题的一种解决方案。在Windows系统中,内置的图片查看器是用户浏览图片的主要工具,但有时可能会遇到图片无法打开或者...

    dds文件图片查看器

    DDS文件图片查看器是一款专为处理DDS(DirectDraw Surface)格式图像设计的轻量级工具。DDS是一种由Microsoft开发的纹理贴图格式,广泛应用于3D图形编程、游戏开发和图像处理领域。这款查看器不仅能够打开并显示DDS...

    仿微信图片查看器

    在iOS开发中,创建一个仿微信的图片查看器是一个常见的需求,这主要涉及到图片的展示、缩放以及用户交互的处理。"仿微信图片查看器"项目的核心目标就是实现一个功能丰富的图片查看组件,它应该能够点击图片查看大图...

    win7图片查看器补丁

    在Windows 7操作系统中,原生的图片查看器——Windows照片查看器,由于设计原因,不支持播放GIF动画。这使得许多用户在尝试查看动态图时遇到困扰。"win7图片查看器补丁"正是为了解决这个问题而设计的,它是一个小巧...

    WinForm图片查看器

    WinForm图片查看器是一款基于C# .NET框架的桌面应用程序,专为用户提供便捷的图片浏览体验。这个项目的核心是利用Windows Forms(WinForm)库来创建用户界面,并结合图像处理技术来实现图片的加载、显示、缩放和旋转...

    基于Swing技术实现“HoneyViewer”图片查看器

    HoneyViewer图片查看器是一个基于java Swing实现的图片查看器,主要实现了图片展示功能。 本实验手册根据需求完成图片读取、切换等功能,平台的全称为:基于java Swing实现的HoneyViewer图片查看器(后简称为: Keep-...

    基于jquery bootstrap 图片查看器

    **基于jQuery和Bootstrap的图片查看器** 在网页开发中,图片查看器是一个常见的功能,它允许用户以更直观的方式查看和交互图片。本项目利用了流行的前端框架jQuery和Bootstrap,构建了一个具有鼠标点击放大、相册...

    WIN10使用图片查看器查看图片修复工具.rar

     如果没有安装其他看图软件,WIN10系统在打开图片时,会自动调用自带的图片查看器来查看图片。若是安装了别的看图软件,会修改默认的图片查看器,这样在打开图片时,就不会使用默认的Windows照片查看器来打开图片了...

    WIN10 启用 “图片查看器” 的完美 CMD (从 MSMG TOOLKIT 中抽出的) 管理员运行.rar

    标题中的“WIN10 启用 “图片查看器” 的完美 CMD”指的是在Windows 10操作系统中重新启用内置的“图片查看器”,这个程序在Win7系统中非常常见,被许多用户认为比Windows 10自带的照片应用更加实用。CMD在这里是指...

    ACDSee5.0图片查看器

    《ACDSee5.0:经典图片查看器的解析与应用》 ACDSee5.0,这款由Amwin论坛推出的图片查看软件,以其小巧、精简的特点在用户群体中广受好评。作为一款轻量级的应用程序,它在功能与便捷性之间找到了一个完美的平衡点...

    C#实现Windows中图片查看器的功能

    在本文中,我们将深入探讨如何使用C#编程语言来实现一个功能完备的Windows图片查看器。这个图片查看器不仅能够浏览图片,还支持图片的旋转和保存旋转后的图像。我们将会涉及以下几个关键知识点: 1. 图像处理库:在...

    js图片查看器

    "js图片查看器"是一种基于JavaScript技术实现的用于在网页中查看和浏览图片的应用程序。JavaScript,简称JS,是Web开发中的主要脚本语言,它允许开发者在用户浏览器上动态处理内容,包括图像的显示、缩放、旋转等...

    图片查看器(JAVA版)

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

    Jquery 实现模拟实现图片查看器功能

    本示例将详细讲解如何利用 jQuery 实现一个基本的图片查看器功能,包括图片的放大、缩小、拖动和旋转,以提供用户友好的交互体验,并确保兼容多种浏览器。 首先,我们需要在页面中引入 jQuery 库。可以通过 CDN...

    产生图片水印和图片加水印文字后,用Window图片查看器查看

    根据提供的文件信息,我们可以归纳出两个主要的知识点:如何在图片上添加水印以及如何使用Windows图片查看器来查看带有水印的图片。 ### 一、如何在图片上添加水印 #### 1. 概述 在数字图像处理领域,为图片添加...

    c#winform 图片查看器.zip

    在C# WinForm环境下开发一个图片查看器是一个常见的任务,涉及到Windows应用程序界面设计、图像处理以及用户交互等多个方面的知识。这个“c#winform 图片查看器.zip”压缩包很可能包含了一个实现这些功能的源代码...

    Windows 图片查看器

    在IT领域,Windows图片查看器是一款内置在微软操作系统中的轻量级图像查看应用程序,它提供了基本的图片浏览和编辑功能。对于C# WinForm开发者来说,理解如何利用这些功能并进行自定义开发是非常有用的。以下将详细...

    使用PyQt5实现图片查看器的示例代码

    ### 使用PyQt5实现图片查看器的关键知识点 #### 一、引言 在软件开发领域,尤其是GUI(图形用户界面)应用开发中,PyQt5因其丰富的功能与强大的跨平台特性,成为Python开发者构建桌面应用的首选框架之一。本文旨在...

    yuv图片查看器,免安装

    "yuv图片查看器,免安装"是一个专为查看YUV格式图像设计的应用程序,它无需用户进行繁琐的安装过程,方便快捷。接下来,我们将深入探讨YUV色彩空间以及这个免安装的图片查看器。 首先,YUV色彩空间是一种为了节省...

Global site tag (gtag.js) - Google Analytics