如何用Java实现图形的放大和缩小

Python032

如何用Java实现图形的放大和缩小,第1张

java实现图形的放大和缩小,其实就是在画图时,改变图片的长和宽。以下代码参考一下:

import java.awt.Graphics

import java.awt.MouseInfo

import java.awt.Point

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.awt.event.MouseEvent

import java.awt.event.MouseListener

import java.io.File

import javax.swing.ImageIcon

import javax.swing.JButton

import javax.swing.JFileChooser

import javax.swing.JFrame

import javax.swing.JPanel

import javax.swing.filechooser.FileNameExtensionFilter

public class App extends JFrame implements MouseListener, ActionListener {

int x = 0

int y = 0

File[] selectedFiles = null

int fileIndex = 0

int width = 200

int height = 200

public App() {

setDefaultCloseOperation(EXIT_ON_CLOSE)

setLocationRelativeTo(null)

setSize(400, 300)

setResizable(false)

getContentPane().setLayout(null)

JPanel panel = new ImagePanel()

panel.setBounds(12, 40, 370, 218)

getContentPane().add(panel)

addMouseListener(this)

JButton btnBrowse = new JButton("Browse")

btnBrowse.addActionListener(this)

btnBrowse.setBounds(12, 9, 91, 21)

getContentPane().add(btnBrowse)

setVisible(true)

}

public static void main(String[] args) {

new App()

}

public void actionPerformed(ActionEvent e) {

JFileChooser chooser = new JFileChooser()

chooser.setMultiSelectionEnabled(true)

FileNameExtensionFilter filter = new FileNameExtensionFilter(

"JPG & GIF Images", "jpg", "gif")

// 设置文件类型

chooser.setFileFilter(filter)

// 打开选择器面板

int returnVal = chooser.showOpenDialog(this)

if (returnVal == JFileChooser.APPROVE_OPTION) {

selectedFiles = chooser.getSelectedFiles()

repaint()

}

}

public void mouseClicked(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {

Point point = MouseInfo.getPointerInfo().getLocation()

x = point.x

y = point.y

}

public void mouseReleased(MouseEvent e) {

Point point = MouseInfo.getPointerInfo().getLocation()

int thisX = point.x

int thisY = point.y

System.out.println("thisX=" + thisX + "  " + "thisY=" + thisY)

if ((y - thisY < 20 && y - thisY > 0)

|| (y - thisY < 0 && y - thisY > -20)) {

// Y 在20范围内移动认为是水平移动

if (x < thisX) {

// right

if (selectedFiles != null

&& fileIndex < selectedFiles.length - 1) {

fileIndex++

}

} else {

// left

if (selectedFiles != null && fileIndex > 0) {

fileIndex--

}

}

} else {

if (x < thisX) {

// 右下

width += 20

height += 20

} else {

// 左上

width -= 20

height -= 20

}

}

repaint()

}

class ImagePanel extends JPanel {

public void paint(Graphics g) {

super.paint(g)

if (selectedFiles != null) {

ImageIcon icon = new ImageIcon(selectedFiles[fileIndex]

.getPath())

g.drawImage(icon.getImage(), 0, 0, width, height, this)

}

}

}

}

放大像素会失真,如果你要实现这一共能的话可以用JLabel来显示图片。有一个方法可以实现图片的缩放ImageIcon

ii

=

new

ImageIcon("img/item.jpg")

Image

img

=

ii.getImage()

img

=

img.getScaledInstance(100,

100,

Image.SCALE_DEFAULT)

ii

=

new

ImageIcon(img)这个例子的getScaledInstance方法可以生成一个新的Image对象,可以缩放成指定的大小。

Image srcImg = ImageIO.read(new FileInputStream(fnSrc) )//取源图

int width = 600//假设要缩小到600点像素

int height = srcImg.getHeight(null)*600/srcImg.getWidth(null)//按比例,将高度缩减

System.out.println("Width: "+srcImg.getWidth(null))// 这几行是调试用

System.out.println("Height: "+srcImg.getHeight(null))

System.out.println("Width2: "+width)

System.out.println("Height2: "+height)

Image smallImg =srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH)//缩小