⑴ java swing中如何改變圖片大小,如下圖
就用自帶的swing都可以把 /** * 改變圖片的大小到寬為size,然後高隨著寬等比例變化 * @param is 上傳的圖片的輸入流 * @param os 改變了圖片的大小後,把圖片的流輸出到目標OutputStream * @param size 新圖片的寬 * @param format 新圖片的格...
⑵ 在java Applet里如何實現滑鼠滾輪放大縮小圖片
創建滑鼠滾輪監聽事件MouseWheelListener,MouseWheelEvent e,
int num=e.getWheelRotation(); 這個用來得到滾輪轉動的方向與單位數,正數表示向下旋轉,負數表示向上旋轉,絕對值表示轉動的單位。
然後你再改變圖片的大小和位置,然後 refresh();
建議用JLabel來顯示圖片,然後在滑鼠的滾輪事件中改變JLabel的大小和位置就OK了,具體的自己去實現。
看來得給你個例子啊!關鍵點1:按比例縮放圖片;2:this.repaint();之前寫錯了不好意思啊
public class Anniu extends JFrame implements MouseWheelListener {
private static final long serialVersionUID = 1L;
JLabel jl = null;
ImageIcon image = new ImageIcon("F://12.jpg");
public Anniu() {
}
public void init() {
setLayout(null);
jl = new JLabel(image);
setSize(800, 600);
jl.setBounds(300, 200, 200, 200);
add(jl);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addMouseWheelListener(this);
setVisible(true);
}
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// TODO Auto-generated method stub
int num = e.getWheelRotation();
int x = (this.getWidth() - jl.getWidth()) / 2;
int y = (this.getHeight() - jl.getHeight()) / 2;
int width=jl.getWidth()+ 2 * num;
int height=jl.getHeight()+ 2 * num;
jl.setIcon(new ImageIcon( image.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH))); //重點1:按所給的大小來設置圖片,不管圖片有多大,總是全圖顯示,可能導致失真!你可以加一個大小限制,超過圖片大小了則不再放大。
jl.setBounds(x + num, y + num, width, height);
this.repaint(); //刷新屏幕
}
⑶ java按比例縮小圖片重繪會丟失數據
會
Java對圖片進行復縮小和放大,都是針制對像素點操作,可以把像素理解成一個矩陣:
如,一張2*4的圖片,如下,一個字母代表一個像素
A A B B
C C D D
那麼放大,好理解,如放大三倍,以前的一個像素就變成了3*3的一個小像素矩陣
AAA AAA BBB BBB
AAA AAA BBB BBB
AAA AAA BBB BBB
CCC CCC DDD DDD
CCC CCC DDD DDD
CCC CCC DDD DDD
這樣圖片做整數倍操作就不會失針,但是做非整數倍,就存在問題,如放大1.5 * 1.5倍
上面的
A A B B
C C D D
就不好弄了,但是Java會自動採取莫種方式對像素進行處理,【可能】變成下面的矩陣:
A A A B B B
A C A D B D
C C C D D D
這么說理解了嗎? 同理Java縮小圖片時也存在此問題
Java在處理大圖片時,失針效果不明顯,因為會自動計算像素之間個過渡色,做為填充
但是在處理小圖片時,失針效果就非常明顯了
註:其實圖片處理軟體一樣,你可以自己畫個2*4的圖片,採用不同工具測試
親,如果回答滿意,請及時採納,謝謝!
⑷ 如何用Java實現圖形的放大和縮小
java實現圖形的放大和縮小,其實就是在畫圖時,改變圖片的長和寬。以下代碼參考一下:
importjava.awt.Graphics;
importjava.awt.MouseInfo;
importjava.awt.Point;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.io.File;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.filechooser.FileNameExtensionFilter;
,ActionListener{
intx=0;
inty=0;
File[]selectedFiles=null;
intfileIndex=0;
intwidth=200;
intheight=200;
publicApp(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(400,300);
setResizable(false);
getContentPane().setLayout(null);
JPanelpanel=newImagePanel();
panel.setBounds(12,40,370,218);
getContentPane().add(panel);
addMouseListener(this);
JButtonbtnBrowse=newJButton("Browse");
btnBrowse.addActionListener(this);
btnBrowse.setBounds(12,9,91,21);
getContentPane().add(btnBrowse);
setVisible(true);
}
publicstaticvoidmain(String[]args){
newApp();
}
publicvoidactionPerformed(ActionEvente){
JFileChooserchooser=newJFileChooser();
chooser.setMultiSelectionEnabled(true);
FileNameExtensionFilterfilter=吵槐飢升返newFileNameExtensionFilter(
"JPG&GIFImages","jpg","gif");
//明世設置文件類型
chooser.setFileFilter(filter);
//打開選擇器面板
intreturnVal=chooser.showOpenDialog(this);
if(returnVal==JFileChooser.APPROVE_OPTION){
selectedFiles=chooser.getSelectedFiles();
repaint();
}
}
publicvoidmouseClicked(MouseEvente){
}
publicvoidmouseEntered(MouseEvente){
}
publicvoidmouseExited(MouseEvente){
}
publicvoidmousePressed(MouseEvente){
Pointpoint=MouseInfo.getPointerInfo().getLocation();
x=point.x;
y=point.y;
}
publicvoidmouseReleased(MouseEvente){
Pointpoint=MouseInfo.getPointerInfo().getLocation();
intthisX=point.x;
intthisY=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();
}
classImagePanelextendsJPanel{
publicvoidpaint(Graphicsg){
super.paint(g);
if(selectedFiles!=null){
ImageIconicon=newImageIcon(selectedFiles[fileIndex]
.getPath());
g.drawImage(icon.getImage(),0,0,width,height,this);
}
}
}
}
⑸ java小程序圖片查看器代碼,實現放大、縮小、旋轉功能
我只實現了放大縮小功能,旋轉還有點問題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();
}
}
}
⑹ 怎麼用java代碼放大或縮小圖片不失真。
放大圖像不會導致失真,而縮小圖像將不可避免的失真。Java中也同樣是這樣。但java提供了4個縮放的微調選項。image.SCALE_SMOOTH //平滑優先image.SCALE_FAST//速度優先image.SCALE_AREA_AVERAGING //區域均值image.SCALE_REPLICATE //像素復制型縮放image.SCALE_DEFAULT //默認縮放模式調用方法Image new_img=old_img.getScaledInstance(1024, 768, Image.SCALE_SMOOTH);得到一張縮放後的新圖。怎麼用java代碼放大或縮小圖片不失真。