完成主舞台布局并绑定主舞台按钮事件

public class CapterScreen extends Application {ImageView iv; //切成的图片展示区域Stage primaryStage; //主舞台Stage stage;        //切图时候的辅助舞台double start_x;     //切图区域的起始位置xdouble start_y;     //切图区域的起始位置ydouble w;           //切图区域宽double h;           //切图区域高HBox hBox;          //切图区域@Overridepublic void start(Stage primaryStage) throws Exception {this.primaryStage = primaryStage;  //主舞台全局赋值AnchorPane root = new AnchorPane(); //锚点布局,也称为 绝对布局,定位布局//创建截屏按钮与显示区域并且进行布局Button bu = new Button("点击截屏");iv= new ImageView();iv.setFitHeight(400);iv.setPreserveRatio(true); //开启等比例缩放root.getChildren().addAll(bu,iv);AnchorPane.setTopAnchor(bu,50.0);AnchorPane.setLeftAnchor(bu,50.0);AnchorPane.setTopAnchor(iv,100.0);AnchorPane.setLeftAnchor(iv,50.0);//设置场景和标题,以及舞台大小Scene scene = new Scene(root);primaryStage.setScene(scene);primaryStage.setTitle("截屏工具");primaryStage.setHeight(800);primaryStage.setWidth(800);primaryStage.show();//为点击截图按钮绑定事件bu.setOnAction(event -> {show();});//绑定截图快捷键,使用快捷键达到点击按钮的目的KeyCombination keyCombination = KeyCombination.valueOf("ctrl+alt+p");Mnemonic mc = new Mnemonic(bu,keyCombination);scene.addMnemonic(mc);}public static void main(String[] args) {Application.launch(args);}
}

显示截图操作舞台并绑定鼠标截图事件

public void show(){//将主舞台缩放到任务栏primaryStage.setIconified(true);//创建辅助舞台,并设置场景与布局stage = new Stage();//锚点布局采用半透明AnchorPane anchorPane = new AnchorPane();anchorPane.setStyle("-fx-background-color: #85858522");//场景设置白色全透明Scene scene = new Scene(anchorPane);scene.setFill(Paint.valueOf("#ffffff00"));stage.setScene(scene);//清楚全屏中间提示文字stage.setFullScreenExitHint("");stage.initStyle(StageStyle.TRANSPARENT);stage.setFullScreen(true);stage.show();//切图窗口绑定鼠标按下事件anchorPane.setOnMousePressed(event -> {//清除锚点布局中所有子元素anchorPane.getChildren().clear();//创建切图区域hBox = new HBox();//设置背景保证能看到切图区域桌面hBox.setBackground(null);//设置边框hBox.setBorder(new Border(new BorderStroke(Paint.valueOf("#c03700"), BorderStrokeStyle.SOLID,null,new BorderWidths(3))));anchorPane.getChildren().add(hBox);//记录并设置起始位置start_x = event.getSceneX();start_y = event.getSceneY();AnchorPane.setLeftAnchor(hBox,start_x);AnchorPane.setTopAnchor(hBox,start_y);});//绑定鼠标按下拖拽的事件anchorPane.setOnMouseDragged(event -> {//用label记录切图区域的长宽Label label = new Label();label.setAlignment(Pos.CENTER);label.setPrefHeight(30);label.setPrefWidth(170);anchorPane.getChildren().add(label);AnchorPane.setLeftAnchor(label,start_x+30);AnchorPane.setTopAnchor(label,start_y);label.setTextFill(Paint.valueOf("#ffffff"));//白色填充label.setStyle("-fx-background-color: #000000");//黑背景//计算宽高并且完成切图区域的动态效果w = Math.abs(event.getSceneX()-start_x);h = Math.abs(event.getSceneY()-start_y);hBox.setPrefWidth(w);hBox.setPrefHeight(h);label.setText("宽:"+w+" 高:"+h);});//绑定鼠标松开事件anchorPane.setOnMouseReleased(event -> {//记录最终长宽w = Math.abs(event.getSceneX()-start_x);h = Math.abs(event.getSceneY()-start_y);anchorPane.setStyle("-fx-background-color: #00000000");//添加剪切按钮,并显示在切图区域的底部Button b = new Button("剪切");hBox.setBorder(new Border(new BorderStroke(Paint.valueOf("#85858544"), BorderStrokeStyle.SOLID,null,new BorderWidths(3))));hBox.getChildren().add(b);hBox.setAlignment(Pos.BOTTOM_RIGHT);//为切图按钮绑定切图事件b.setOnAction(event1 -> {//切图辅助舞台小时stage.close();try {//切图具体方法capterImg();} catch (Exception e) {e.printStackTrace();}//主舞台还原primaryStage.setIconified(false);});});scene.setOnKeyPressed(event -> {if(event.getCode() == KeyCode.ESCAPE){stage.close();primaryStage.setIconified(false);}});}

处理截屏与图像的保存

 public void capterImg() throws Exception {//利用awt中的方法,通过记录的起始点和长宽完成屏幕截图Robot robot = new Robot();Rectangle re = new Rectangle((int)start_x,(int)start_y,(int)w,(int)h);BufferedImage screenCapture = robot.createScreenCapture(re);//截图图片背景透明处理//BufferedImage bufferedImage = Picture4.transferAlpha(screenCapture);//不进行背景透明处理BufferedImage bufferedImage = screenCapture;//转换图片格式展示在主舞台的场景中WritableImage writableImage = SwingFXUtils.toFXImage(bufferedImage, null);iv.setImage(writableImage);//将截图内容,放入系统剪切板Clipboard cb = Clipboard.getSystemClipboard();ClipboardContent content = new ClipboardContent();content.putImage(writableImage);cb.setContent(content);//将截取图片放入到系统固定位置ImageIO.write(bufferedImage,"png",new File("E:/capter.png"));}

背景透明处理

public static BufferedImage transferAlpha(BufferedImage img) {BufferedImage bufferedImage = null;try {//取左上角点作为背景点int RGB = img.getRGB(img.getMinX(),img.getMinY());int R = (RGB & 0xff0000) >>16;int G= (RGB & 0xff00) >> 8;int B = (RGB & 0xff);bufferedImage = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);for (int j1 = img.getMinY(); j1 < img.getHeight(); j1++) {//遍历一行中的rgb三通道像素点,for (int j2 = img.getMinX(); j2 < img.getWidth(); j2++) {//获取固定点的rgb值int rgb = img.getRGB(j2, j1);int r =(rgb & 0xff0000 ) >> 16 ;int g= (rgb & 0xff00 ) >> 8 ;int b= (rgb & 0xff );if((Math.abs(r-R)<15) && (Math.abs(g-G)<15) && (Math.abs(b-B)<15)){rgb = (1 << 24) | (rgb & 0x00ffffff);}//设置固定点的rgb值bufferedImage.setRGB(j2, j1, rgb);}}} catch (Exception e) {e.printStackTrace();}finally{}return bufferedImage;}

整体效果展示

javaFx屏幕截图工具相关推荐

  1. 基于java的qq屏幕截图工具的设计与实现_几款鲜为人知的实用工具,你都尝试过吗?...

    Any.Do--跨平台免费日程管理应用 它不仅提供Android.iOS客户端,以及Chrome浏览器扩展.网页版,而且允许登陆用户同步日程,并与用户的Google Tasks同步.Any.Do支持管 ...

  2. 全功能的屏幕截图工具 - PicPick

    全功能的屏幕截图工具 - PicPick 一个全功能的屏幕截图工具,直观的图像编辑器,颜色选择器,颜色调色板,像素标尺,量角器,瞄准线和白板等等. 1. PicPick https://picpick ...

  3. 【java毕业设计】基于java+BS的QQ屏幕截图工具设计与实现(毕业论文+程序源码)——屏幕截图工具

    基于java+BS的QQ屏幕截图工具设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+BS的QQ屏幕截图工具设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: ...

  4. C#软件开发实例.私人订制自己的屏幕截图工具——放大镜的功能代码优化

    最近在使用屏幕截图工具的时候发现放大镜的功能有点小问题,准星和实际鼠标位置对不上,取到的颜色并不鼠标所在的点颜色,所以去看"C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能 ...

  5. 基于Java的QQ屏幕截图工具的设计与实现(论文+PPT+源码)

    幻灯片1 基于Java的QQ屏幕截图工具的设计与实现 幻灯片2 论文绪论 设计方法 设计结果 论文总结 CONTENTS 致 谢 幻灯片3 论文绪论 幻灯片4 课题背景 当今时代是飞速发展的信息时代, ...

  6. 一款贼好用的屏幕截图工具——Snipaste

    最近,写论文,要用到截图工具,道友们都知道了啦,虽然微信或是QQ的截图工具很6,但是会严重失真,使得图片打印出来时,很模糊,答辩的时候,小心被导师吐槽哦!所以,强烈推荐一款屏幕截图工具Snipaste ...

  7. 【拥抱开源】十年之做C#屏幕截图工具全面开源

    最初的项目名称是屏幕截图2005,因为这一年是2005年,也因为它是使用VS2005创建的.这十年来一直在使用和完善中,只是个人的精力有限,想做的东西太多,还没有把它做的特别的完善.之前写过 C#软件 ...

  8. C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包含鼠标指针形状

    本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...

  9. C#软件开发实例.私人订制自己的屏幕截图工具(一)功能概览

    本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...

最新文章

  1. 扫地机器人评测 毛发_会切毛发的机器人?海尔扫地机P70抢先评测
  2. HDU-3573 Buy Sticks
  3. Linux 防火墙开放特定端口 (iptables)
  4. leetcode203.移除链表元素
  5. go安装goctl进行Go Dockefile的自动生成
  6. 实验四 linux进程控制实验报告,Linux系统进程控制操作系统实验报告4
  7. Starling粒子系统工具
  8. Python学习笔记: 闭包
  9. 力扣-205 同构字符串
  10. Robot Framework (一)自动化测试框架搭建
  11. 合并两个有序链表-递归
  12. 工厂如何引入ERP生产管理系统
  13. flutter 的像素尺寸
  14. JPA和Spring-Data-JPA简介
  15. (二)【Matlab】Matlab矩阵处理
  16. 百度云for mac破解方法--获取无限svip
  17. 基础编程题目集(15 分题)
  18. Be awesome
  19. 一种基于区块链的身份认证方法
  20. Android Wifi自动打开并连接

热门文章

  1. 为什么 ERP 系统的用户体验不好?
  2. 怎么在jq中添加html样式,jquery怎么添加css样式
  3. 关于Redis的远程连接 Connection: Disconnect on error 问题
  4. Hyper-v功能开启及安装Linux虚拟机
  5. 相对熵(KL散度)计算过程
  6. 协议森林05 我尽力 (IP协议详解)
  7. ls -l 字段意思
  8. C语言通讯录的制作【数据结构】【课程设计】
  9. 计算机网络课设-电子邮件客户端程序设计与实现(C/C++语言)
  10. 西南科技大学学生邮箱申请