国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java中怎么實(shí)現一個(gè)圖片剪裁功能

發(fā)布時(shí)間:2021-07-04 20:13 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 開(kāi)發(fā)技術(shù)

Java中怎么實(shí)現一個(gè)圖片剪裁功能,針對這個(gè)問(wèn)題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

Listing1: 引入的類(lèi)

import java.awt.Graphics;  import java.awt.Rectangle;  import java.awt.Robot;  import java.awt.event.MouseEvent;  import java.awt.event.MouseListener;  import java.awt.event.MouseMotionListener;  import java.awt.image.BufferedImage;  import java.io.File;  import javax.imageio.ImageIO;  import javax.swing.JFrame;

說(shuō)明:

  1. Graphics 類(lèi)包含繪制矩形的方法

  2. 我們使用 Rectangle 類(lèi)作為拖拉的矩形區域以作剪裁

  3. Robot 類(lèi)用于捕獲屏幕截圖

  4. 使用鼠標偵聽(tīng)器來(lái)獲取鼠標的拖拉時(shí)間

  5. Robot 類(lèi)使用 BufferedImage 來(lái)做圖像處理

  6. File 類(lèi)用于打開(kāi)圖像文件

  7. ImageIO 類(lèi)用于將圖像寫(xiě)到 png 或者 jpg 圖像文件中

  8. JFrame 用于顯示界面

現在我們編寫(xiě)包含 main 方法的入口類(lèi)

Listing2: 入口類(lèi)

public class CropImage extends JFrame implements MouseListener, MouseMotionListener  {      int drag_status=0,c1,c2,c3,c4;  public static void main(String args[])  {      new CropImage().start();  }

說(shuō)明:

  1. 編寫(xiě)了一個(gè)名為 CropImage 的類(lèi)

  2. 該類(lèi)擴展了 JFrame 以實(shí)現 frame 的所有功能

  3. 實(shí)現了不同的鼠標事件偵聽(tīng)器以便知道用戶(hù)什么時(shí)候開(kāi)始拖動(dòng)鼠標指針

  4. drag_status 變量用于保存鼠標開(kāi)始拖動(dòng)時(shí)的坐標

  5. 我們定義了 main 方法去調用一個(gè) start 方法,這個(gè)方法將在下面定義

接下來(lái)是 start 方法

Listing 2

public void start()  {      ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");      add(im);      setSize(400,400);      setVisible(true);      addMouseListener(this);      addMouseMotionListener( this );      setDefaultCloseOperation(EXIT_ON_CLOSE);  }

說(shuō)明:

  1. 我們定義一個(gè)名為 ImagePanel 的類(lèi),使用要處理的圖像作為參數

  2. 在 JFrame 中放置這個(gè)要顯示圖片的 ImagePanel,并開(kāi)始偵聽(tīng)鼠標事件

下面我們定義用于處理鼠標事件的方法

Listing 3: 鼠標事件處理函數

@Override public void mouseClicked(MouseEvent arg0) {  }     @Override public void mouseEntered(MouseEvent arg0) {  }     @Override public void mouseExited(MouseEvent arg0) {  }     @Override public void mousePressed(MouseEvent arg0) {      repaint();      c1=arg0.getX();      c2=arg0.getY();  }     @Override public void mouseReleased(MouseEvent arg0) {      repaint();      if(drag_status==1)      {      c3=arg0.getX();      c4=arg0.getY();      try     {      draggedScreen();      }      catch(Exception e)      {          e.printStackTrace();      }      }  }     @Override public void mouseDragged(MouseEvent arg0) {      repaint();      drag_status=1;      c3=arg0.getX();      c4=arg0.getY();  }   @Override public void mouseMoved(MouseEvent arg0) {         }     public void paint(Graphics g)  {      super.paint(g);      int w = c1 - c3;      int h = c2 - c4;      w = w * -1;      h = h * -1;      if(w<0)          w = w * -1;      g.drawRect(c1, c2, w, h);         }

說(shuō)明:

  1. 當鼠標按下時(shí)存儲當前坐標到 c1 和 c2

  2. 當鼠標按下并開(kāi)始拖動(dòng)時(shí)將拖動(dòng)狀態(tài)變量 drag_status 設置為 true

  3. 到鼠標按鍵松開(kāi)時(shí)表示圖像剪裁區域已經(jīng)選擇完畢,調用 draggedscreen 方法

  4. paint 方法用于拖動(dòng)時(shí)候的矩形顯示,通過(guò)當前坐標和初始記錄的坐標來(lái)繪制矩形

下面是 draggedscreen 方法的代碼

Listing 4: draggedScreen 方法

public void draggedScreen()throws Exception  {          int w = c1 - c3;          int h = c2 - c4;          w = w * -1;          h = h * -1;          Robot robot = new Robot();          BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));          File save_path=new File("screen1.jpg");          ImageIO.write(img, "JPG", save_path);      System.out.println("Cropped image saved successfully.");  }}

說(shuō)明:

  1. 首先計算圖像的高度和寬度

  2. 使用 Robot 類(lèi)來(lái)對剪裁的區域進(jìn)行截圖并保持到另外一個(gè)文件 screen1.jpg

完整的代碼

Listing 5: ImagePanel.java

import java.awt.Dimension;  import java.awt.Graphics;  import java.awt.Image;     import javax.swing.ImageIcon;  import javax.swing.JPanel;         class ImagePanel extends JPanel {               private Image img;               public ImagePanel(String img) {              this(new ImageIcon(img).getImage());            }               public ImagePanel(Image img) {              this.img = img;              Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));             // Dimension size = new Dimension(10,10);              setPreferredSize(size);              setMinimumSize(size);              setMaximumSize(size);              setSize(size);              setLayout(null);            }               public void paintComponent(Graphics g) {              g.drawImage(img, 0, 0, null);            }             }

Listing 6:CropImage.java

import java.awt.Graphics;  import java.awt.Rectangle;  import java.awt.Robot;  import java.awt.event.MouseEvent;  import java.awt.event.MouseListener;  import java.awt.event.MouseMotionListener;  import java.awt.image.BufferedImage;  import java.io.File;  import javax.imageio.ImageIO;  import javax.swing.JFrame;     public class CropImage extends JFrame implements MouseListener, MouseMotionListener  {      int drag_status=0,c1,c2,c3,c4;  public static void main(String args[])  {      new CropImage().start();  }  public void start()  {      ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");      add(im);      setSize(400,400);      setVisible(true);      addMouseListener(this);      addMouseMotionListener( this );      setDefaultCloseOperation(EXIT_ON_CLOSE);  }  public void draggedScreen()throws Exception  {          int w = c1 - c3;          int h = c2 - c4;          w = w * -1;          h = h * -1;          Robot robot = new Robot();          BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));          File save_path=new File("screen1.jpg");          ImageIO.write(img, "JPG", save_path);      System.out.println("Cropped image saved successfully.");  }  @Override public void mouseClicked(MouseEvent arg0) {      }     @Override public void mouseEntered(MouseEvent arg0) {      }     @Override public void mouseExited(MouseEvent arg0) {       }     @Override public void mousePressed(MouseEvent arg0) {      repaint();      c1=arg0.getX();      c2=arg0.getY();  }     @Override public void mouseReleased(MouseEvent arg0) {      repaint();      if(drag_status==1)      {      c3=arg0.getX();      c4=arg0.getY();      try     {      draggedScreen();      }      catch(Exception e)      {          e.printStackTrace();      }      }  }     @Override public void mouseDragged(MouseEvent arg0) {      repaint();      drag_status=1;      c3=arg0.getX();      c4=arg0.getY();  }     @Override public void mouseMoved(MouseEvent arg0) {         }     public void paint(Graphics g)  {      super.paint(g);      int w = c1 - c3;      int h = c2 - c4;      w = w * -1;      h = h * -1;      if(w<0)          w = w * -1;      g.drawRect(c1, c2, w, h);    }  }

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

浪潮AV色综合久久天堂| 无套内射AV五十区| 亚洲熟妇丰满XXXXX| 天天爽夜夜爽人人爽| 国产三级久久久精品麻豆三级| 大明荫蒂女人毛茸茸|