歡迎您光臨本站 註冊首頁

如何在 Java 中進行圖片剪裁

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

這是一篇入門級文章,高手請略過。
 

在這篇文章中我們將學習如何用 Java 對圖像進行剪裁併將剪裁出來的部分單獨保存到文件中。

我們將通過以下步驟來學習:

  1. 輸入圖像,指定要處理的圖像路徑
  2. 允許用戶拖放要剪裁的部分
  3. 選擇后使用 Robot 類來確定剪裁部分的坐標
  4. 剪裁所選圖像並保持

接下來我們開始編碼部分。

Listing1: 引入的類

01 import java.awt.Graphics;
02 import java.awt.Rectangle;
03 import java.awt.Robot;
04 import java.awt.event.MouseEvent;
05 import java.awt.event.MouseListener;
06 import java.awt.event.MouseMotionListener;
07 import java.awt.image.BufferedImage;
08 import java.io.File;
09 import javax.imageio.ImageIO;
10 import javax.swing.JFrame;

說明:

  1. Graphics 類包含繪製矩形的方法
  2. 我們使用 Rectangle 類作為拖拉的矩形區域以作剪裁
  3. Robot 類用於捕獲屏幕截圖
  4. 使用滑鼠偵聽器來獲取滑鼠的拖拉時間
  5. Robot 類使用 BufferedImage 來做圖像處理
  6. File 類用於打開圖像文件
  7. ImageIO 類用於將圖像寫到 png 或者 jpg 圖像文件中
  8. JFrame 用於顯示界面

現在我們編寫包含 main 方法的入口類

Listing2: 入口類

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

說明:

  1. 編寫了一個名為 CropImage 的類
  2. 該類擴展了 JFrame 以實現 frame 的所有功能
  3. 實現了不同的滑鼠事件偵聽器以便知道用戶什麼時候開始拖動滑鼠指針
  4. drag_status 變數用於保存滑鼠開始拖動時的坐標
  5. 我們定義了 main 方法去調用一個 start 方法,這個方法將在下面定義

接下來是 start 方法

Listing 2

01 public void start()
02 {
03 ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");
04 add(im);
05 setSize(400,400);
06 setVisible(true);
07 addMouseListener(this);
08 addMouseMotionListener( this );
09 setDefaultCloseOperation(EXIT_ON_CLOSE);
10 }

說明:

  1. 我們定義一個名為 ImagePanel 的類,使用要處理的圖像作為參數
  2. 在 JFrame 中放置這個要顯示圖片的 ImagePanel,並開始偵聽滑鼠事件

下面我們定義用於處理滑鼠事件的方法

Listing 3: 滑鼠事件處理函數

01 @Override
02 public void mouseClicked(MouseEvent arg0) {
03 }
04  
05 @Override
06 public void mouseEntered(MouseEvent arg0) {
07 }
08  
09 @Override
10 public void mouseExited(MouseEvent arg0) {
11 }
12  
13 @Override
14 public void mousePressed(MouseEvent arg0) {
15 repaint();
16 c1=arg0.getX();
17 c2=arg0.getY();
18 }
19  
20 @Override
21 public void mouseReleased(MouseEvent arg0) {
22 repaint();
23 if(drag_status==1)
24 {
25 c3=arg0.getX();
26 c4=arg0.getY();
27 try
28 {
29 draggedScreen();
30 }
31 catch(Exception e)
32 {
33 e.printStackTrace();
34 }
35 }
36 }
37  
38 @Override
39 public void mouseDragged(MouseEvent arg0) {
40 repaint();
41 drag_status=1;
42 c3=arg0.getX();
43 c4=arg0.getY();
44 }
45  
46 @Override
47 public void mouseMoved(MouseEvent arg0) {
48  
49 }
50  
51 public void paint(Graphics g)
52 {
53 super.paint(g);
54 int w = c1 - c3;
55 int h = c2 - c4;
56 w = w * -1;
57 h = h * -1;

好文,頂一下
(0)
0%
文章真差,踩一下
(0)
0%
------分隔線----------------------------
  • 上一篇:學會閱讀源代碼
  • 下一篇:一種在圖片里隱藏你的程序代碼的技術
  • 我要評論!
  • 收藏
  • 挑錯
  • 推薦
  • 列印


把開源帶在你的身邊-精美linux小紀念品
文章分類
    新聞動態 企鵝看世界 軟體更新資訊 新手入門 資料庫類 系統安全 系統管理 網路管理 使用經驗 編程開發 企業應用 硬體相關 Unix家族 觀點評論 人物介紹 技術前沿 專題 開源生活 開源美圖 英文資料 Eden團隊出品 開源軟體庫
軟體導航
  • 發行版類 內核相關 伺服器類 模擬模擬 文件管理
  • 系統安全 多媒體類 硬體工具 編程開發 網路熱門
  • 雜類工具 網路工具 圖形圖像 閱讀編輯 書籍資料
  • 遊戲軟體 辦公軟體 數據備份 中文相關 系統管理
  • 科學計算 資料庫類 XWin系統
論壇導航
  • 初級應用-> 新手入門 | 伺服器應用 | 中文化 | 軟體使用交流 | 硬體驅動 | 圖片秀 | 茶館
  • 高級應用->資料庫 | 系統安全 | 嵌入式應用|
  • 編程開發-> C/C++(STL/boost) | 內核 | RAD|Perl/PHP/Python | JAVA/XML | Shell
  • 發行版-> Redhat和Fedora | Debian | Gentoo | Slackware/Suse | Mandrake/Mandriva
  • Unix ->FreeBSD | Solaris | 其他Unix討論
論壇精華
一周熱點

[火星人 ] 如何在 Java 中進行圖片剪裁已經有814次圍觀

http://coctec.com/docs/program/show-post-71332.html