加微信,获取正文+源码:
👍 适合初学者作为课程设计和毕业论文设计的模板参考;👭 查看文末<微信号>1对1马上沟通;
📝 选题、开题报告、任务书、正文、图纸、程序全都有;
🌈 全学科1对1咨询,承接各种定制系统,有问题可以留言咨询,帮助到更多的人。
基于java的QQ截屏工具的设计和实现(论文+源代码+辅导视频+答辩PPT+任务书)课程设计论文模板
第一章 程序简介
当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出。
本软件采用Java语言进行模拟qq截图功能,获取屏幕方式灵活,可以获取指定的屏幕,并且可以对获取到的截图进行存储,编辑(添加文字)等操作,对这些操作设置了自定义热键。该软件主要有捕获光标功能,可以指定截取屏幕的区域。软件具有捕捉光标,可以随着鼠标的移动获取屏幕区域,为之后的存储和编辑提供前置条件。图片可以自命名,获取到的截图可以依据当前系统时间进行命名,也可以通过模板(文件名)进行命名,拥有自命名功能。获取到的截图可以在窗口中央位置进行预览,并且可以指定存储区域将截图用bmp,jpeg,png(静态), gif(动态)其中的某一种图像格式将其存储,拥有预览和存储功能。可以直接将获取到的截图复制到剪切板中,之后可以从剪切板中粘贴到word等文档中。多层菜单栏,可以获取一到多个截图,并以多个界面显示出来,拥有层叠功能。可以通过编辑为截图添加文字,为截图添加一些描述信息之后仍可以将截图存储,用户有编辑功能。
第二章 程序截图
开发的总体设计:
截图:根据提示,随机获取指定屏幕区域
编辑:在图片上添加文字
存储:指定存储目录将截图进行存储流程图请看下图:
图4-2 程序流程图
系统的外观如下图所示:
图5-1 系统外观图
设置起点终点横纵坐标,注解请看下面:
这里实现的是获取截取屏幕范围起点、终点的横纵坐标,然后将这个范围的边框设置为红色,画出对应截取屏幕的范围。
对于纵坐标y,通过三目运算符判断,如果startY小于endY,那么y的值为startY,否则为endY。
选择区域的变量设置为select,创建一个新的矩形框对象,他的宽是起点的横坐标减去终点的横坐标的绝对值;他的高是起点的纵坐标减去终点的纵坐标的绝对值。
设置八点的位置,注解请看下面:
设置八个点的位置,先创建一个坐标对象,设置他的起始点和终点,起点就是x,y两个参数减去5个像素点,终点的位置在(10,10)
第二个点同上边的第一个点。
然后是第三个点的位置,判断起点的横坐标是否大于终点的横坐标,如果结果为true,则起始点横坐标为startX,否则为EndX;终点的坐标依然是(10,10)
依次往后的点都如同第三个点;
运行这个软件的效果:
通过if语句来判断代码是否开始执行,在这里调用前边写的方法,设置截图区域待确认状态下是青色,fillrect该函数用指定的画刷填充矩形,然后在设置截图边框颜色为红色,设置drawRect,将需要截图的矩形框坐标参数传入其中,设置他的颜色为黑色,然后设置drawString方法,在截图的时候输出一些提示用户的信息。
开始截图选择指定区域的4个顶点以及每条边的中点,展示图请看下图:
图5-2 八点及边线展示图
如果成功截图,则进入截图展示页面,在多层菜单栏显示出第几张图片,图片正下方有四个选项:”复制到剪切板”,”存储”,”关闭”,”编辑”,展示效果请看下图:
图5-2 成功截图展示图
界面以及按钮的展示图如下:
图5-3 添加文字界面
其中需要设置格式过滤器,选择所需要的格式:
这是向用户可选择的文件过滤器列表添加一个过滤器,如果应该保存该文件就返回true,否则返回false,用户点击保存按钮的时候,由继承了这个过滤器类上门的UI调用此方法,但要确保指定的文件是可见的,不是隐藏的,并要通知对此事件感兴趣的所有侦听器,最后返回一个bmp对象,给用户一个反馈.
这是通过继承filechooser类来让用户最终确定保存的格式,给用户提供了一种简单的机制,并返回用户保存路径,通过用户选择的保存格式,通过它相对应的过滤器,如保存GIG格式的过滤器privateclassGIFfilter并且写了一个暂时类,来显示当前的屏幕图像,TEMP,引证了过滤器的判断,最终实现jpeg,bmp,png,和动态图片gif,的保存。
展示图请看下面:
图5-4-3 截图保存过程图
点击保存后,进入到目录下进行查看,查看是否保存成功。
图5-4-3 查看已保存的截图
经查看已经成功存储
第三章 论文文档
第四章 源码示例
主界面设置代码及注解:
定义了一个私有的获取截图方法,并且声明一个截图对象,然后把他放到保存之后进行编辑(如:添加文字)
panel.setBorder(new TitledBorder(border, "设置",
Font.LAYOUT_LEFT_TO_RIGHT,Font.LAYOUT_LEFT_TO_RIGHT, font));
里面运用一个布局管理器,部件如果想加入其中需要借助GridBagConstraints,利用组件的横纵坐标,并设置了组件所占行列数,也就是截图的宽度,还有截图的高度,当组件在其格内而不能撑满其格时,通过fill的值来设定填充方式,
gbc.insets = new Insets(5, 10, 5, 10);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth = 1;
JLabel label;
label = new JLabel("选择字体:", JLabel.RIGHT);
panel.add(label, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
fontCB = new JComboBox(Common.getAvailableFontFamilyNames());
panel.add(fontCB, gbc);
gbc.weightx = 1.0;
gbc.gridwidth = 1;
label = new JLabel("字体大小:", JLabel.RIGHT);
panel.add(label, gbc);
fontsizeTF = new JTextField("15");
panel.add(fontsizeTF, gbc);
label = new JLabel("水印位置:", JLabel.RIGHT);
panel.add(label, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
towardCB = new JComboBox(toward);
panel.add(towardCB, gbc);
gbc.gridwidth = 1;
label = new JLabel("字体样式:", JLabel.RIGHT);
panel.add(label, gbc);
fontstyleCB = new JComboBox(fontstyle);
panel.add(fontstyleCB, gbc);
label = new JLabel("水印颜色:", JLabel.RIGHT);
panel.add(label, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
fontcolorCB = new JComboBox(fontcolor);
panel.add(fontcolorCB, gbc);
gbc.weightx = 1.0;
gbc.gridwidth = 1;
label = new JLabel("透明度:", JLabel.RIGHT);
panel.add(label, gbc);
利用滑块,用户可以用来对截图进行大小滚动查看,如果再深加设置,还可以通过拖拽来调节一些信息,比如音量,背光亮度等,可以在代码中生成对应的输出口。
}
});
panel.add(alphaSlider, gbc);
label = new JLabel("缩放大小:", JLabel.RIGHT);
panel.add(label, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
scaleCB = new JComboBox(scales);
panel.add(scaleCB, gbc);
gbc.gridwidth = 1;
label = new JLabel("水印内容:", JLabel.RIGHT);
panel.add(label, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
markTF = new JTextField("From CSDN Cannel_2020's blog");
panel.add(markTF, gbc);
gbc.gridwidth = 1;
label = new JLabel("执行进度:", JLabel.RIGHT);
panel.add(label, gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
progressBar = new JProgressBar(0, 1);
progressBar.setStringPainted(true);
panel.add(progressBar, gbc);
Common.setComponentsFont(panel, font);
return panel;
}
部分按钮设置相关代码:
protected enum ButtonStyle{
selectImage("选择图片"),
selectSavepath("选择存放路径"),
preview("预览效果"),
batching("批量添加"),
moreSetting("更多设置"),
drirect("添加文字");
private String name;
ButtonStyle(String name){
this.name = name;
}
public String getButtonName(){
return name;
}
}
加微信,获取正文+源码:
👍 适合初学者作为课程设计和毕业论文设计的模板参考;👭 查看文末<微信号>1对1马上沟通;
📝 选题、开题报告、任务书、正文、图纸、程序全都有;
🌈 全学科1对1咨询,承接各种定制系统,有问题可以留言咨询,帮助到更多的人。