java canvas 缩放图片_java小程序图片查看器代码,实现放大、缩小、旋转功能

这是一个使用Java Swing的Canvas组件实现的图片查看器,具备图片放大、缩小功能。通过JSlider控制缩放比例,同时包含一个旋转按钮,但旋转功能存在一些问题。代码中创建了一个名为OperationOnPic的JFrame,内部包含一个Mycanvas类用于绘制图片,并使用JSlider进行交互。
摘要由CSDN通过智能技术生成

8b6a0d1fd8dd3fdab5a2096fcd237d6b.png

咆哮

回答时间:2019-12-05

向TA提问

我只实现了放大缩小功能,旋转还有点问题package com.lzw;import java.awt.BorderLayout;

import java.awt.Canvas;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.net.URL;import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JSlider;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

/*

* @功能:实现图片的放大缩小与旋转功能

* @日期:2011.6.29

*/

public class OperationOnPic extends JFrame{

private JPanel imageJpanel;

private JPanel southJpanel;

private JButton rorateButton;

private Mycanvas canvas ;

private int imgWidth, imgHeight;

private JSlider jSlide; //滑动块组建

// private JScrollPane jScrollPane ;

Image img;

private static int num=0;

private static int newWidth=0;

private static int newHeigth=0;

public static boolean isroate=false;

public OperationOnPic(){

setTitle("图片操作");

//设置窗体大小

setSize(800, 600);

//设置窗体显示在中央位置

setLocationRelativeTo(null);

//URL imgUrl = OperationOnPic.class.getResource("2.jpg"); //获得图片路径

//img = Toolkit.getDefaultToolkit().getImage(imgUrl);// 获取图片资源

ImageIcon image=new ImageIcon(OperationOnPic.class.getResource("2.jpg"));

img=image.getImage();

canvas=new Mycanvas();

//调用布局方法

init();

//设置窗体可见

setVisible(true);

}

public void init(){

setDefaultCloseOperation(this.EXIT_ON_CLOSE); //设置窗体可关闭

imageJpanel=new JPanel();

southJpanel=new JPanel();

imageJpanel.setLayout(new BorderLayout());

imageJpanel.add(canvas,BorderLayout.CENTER);

imageJpanel.add(getJSlider(),BorderLayout.SOUTH);

rorateButton=new JButton("图片旋转");

rorateButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

num+=5;

isroate=true;

canvas.repaint();

isroate=false;

}

});

southJpanel.add(rorateButton); //将按钮添加到面板上

this.getContentPane().add(imageJpanel,BorderLayout.CENTER);

this.getContentPane().add(southJpanel,BorderLayout.SOUTH);

}

public JSlider getJSlider(){

if(jSlide==null){

jSlide=new JSlider(); //实例化一个滑动块对象

jSlide.setMaximum(500); //设置滑动块的最大取值

jSlide.setMinimum(1); //设置滑动块的最小取值

jSlide.setValue(50); //设置滑动块当前值

jSlide.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) {

// TODO Auto-generated method stub

canvas.repaint(); //重新绘制图像

}

});

}

return jSlide;

}

public static void main(String[] args) {

new OperationOnPic();

}

class Mycanvas extends Canvas{

public void paint(final Graphics g){ //重写paint

if(isroate==false){

imgWidth=img.getWidth(this);

imgHeight=img.getHeight(this);

float value=jSlide.getValue(); //取得滑动块的值

newWidth=(int)(imgWidth*value/100);

newHeigth=(int)(imgHeight*value/100);

g.drawImage(img,0,0,newWidth,newHeigth,this);

g.dispose();

}else{

num+=5;

Graphics2D g2=(Graphics2D)g;

g2.rotate(Math.toRadians(num));

g2.drawImage(img,0,0,400,400,this);

g.dispose();

}

}

}

收起

6f93e2c92fc5e58e2ec18df1db0b9f08.png

阅读全文

9ded402a52cdd2b9481e864a5093252c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值