基于Swing實現的截屏工具

jopen 11年前發布 | 29K 次閱讀 Swing Java開發

基于Swing實現的截屏工具

主要思路:

首先繪制截取到的屏幕,然后繪制mask層,根據用戶鼠標選擇,將選擇區域的mask層像素設置

為完全透明,即不透明度為0,當不透明度為255時表示完全不透明。關于如何操作

BufferedImage像素參見這里:http://blog.csdn.net/jia20003/article/details/7279667

圖示如下:

基于Swing實現的截屏工具

技術點詳解:

1.       使用Javarobot類實現對屏幕的截取

2.       使用MouseListener與MouseMotionListener實現對用戶鼠標操作的位置跟蹤

3.       使用UI與控制分離的原則完成編碼

4.       使用Java2D功能完成對選擇區域的標識與像素提取

5.       使用以前的FullScreen功能實現全屏功能-http://blog.csdn.net/jia20003/article/details/6876995

6.       使用Swing的ToolKit類實現剪切板操作

7.       使用字體文件完成特殊字體顯示功能

8.       通過對像素數據的透明度設置實現mask功能

關鍵代碼解釋:

實現Robot截屏的代碼如下:

// Make a rectangle accordingto the size of the screen

Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize() );

//Take the screen snapshot

Robotrobot = new Robot();

return robot.createScreenCapture(rectangle);


實現Swing剪切板功能的代碼如下:

CustomTransferabletransferable = new CustomTransferable(bi,1.0f);

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(transferable,null);

 

實現圖像保存的代碼如下:

File outputfile =fileChooser.getSelectedFile();

System.out.println(outputfile.getAbsolutePath());

ImageIO.write(bi, "png", outputfile);

 

實現選擇區域矩形獲取與更新UI的代碼如下:

endX = (int)event.getPoint().getX();

endY = (int)event.getPoint().getY();

if(startX > 0&& startY > 0 && (endX > startX) && (endY > startY)) {

int width = endX - startX;

int height = endY - startY;

mainView.updateView(new Rectangle(startXstartY, width,height));

}

 

創建Mask的代碼如下:

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

int height = (int)screenSize.getHeight();

int width = (int)screenSize.getWidth();

maskImage = newBufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);

int[] pixels = newint[height *width];

int index = 0;

int ta = 0, tr = 0,tg = 0, tb = 0;

for(int row = 0; row< height; row++) {

for(int col = 0; col< width; col++) {

index = row * width + col;

ta = 255/2;

tr = Color.GRAY.getRed();

tg = Color.GRAY.getGreen();

tb = Color.GRAY.getBlue();

pixels[index] = (ta << 24) | (tr<< 16) | (tg << 8) | tb;

}

}

setRGB(maskImage, 0, 0, width,height, pixels);

有如下功能:

-         支持mask功能

-         直接截屏選取,類似QQ截屏選取功能

-         支持copy到系統剪切板

-         支持保存截屏為png或者jpg格式文件

-          支持鼠標文字添加-類似Windows Paint添加文字方式(新功能2012-06-19)

使用說明:

-         直接雙擊jar文件可以直接運行

-         如果你的winrar或者其它壓縮工具關聯了.jar文件,請右鍵選擇Java圖標運行

-         當點[Capture Screen]之后,變成全屏模式,只有按鍵才會退出

-         當按鍵退出時,鼠標選擇區域的圖像將會自動被顯示在窗口中,如圖所示:

程序啟動界面:

基于Swing實現的截屏工具

完成截屏按鍵返回窗口模式界面:

基于Swing實現的截屏工具

點擊[SaveImage]按鈕時候效果:

基于Swing實現的截屏工具

特別提示:運行該工具需要預先安裝JRE6或JRE6以上版本運行環境

來自:http://blog.csdn.net/jia20003/article/details/7656728

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!