电脑截不了java页面的图可能有以下几种原因:
你的电脑有其他的桌面应用程序在运行,影响了截图功能。
你的电脑没有正确使用截图快捷键或工具。
你可以尝试以下几种方法来解决这个问题:
更新你的电脑系统和浏览器到最新版本。
关闭不必要的桌面应用程序,释放内存空间。
使用合适的截图快捷键或工具,如PrtSc键、Win+Shift+S键、QQ或微信截图等。
使用浏览器自带的网页全屏高清截图功能,如Microsoft Edge和Chrome浏览器。
下面给你介绍将全屏幕截图保存到指定目录下的代码,希望能对你有帮助:核心代码为:snapShot方法中的相关逻辑
package Jietu
import java.awt.Dimension
import java.awt.Rectangle
import java.awt.Robot
import java.awt.Toolkit
import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO
public class CameraTest {
private String filePreStr// 默认前缀(选择存储路径例如: D:\\)
private String defName = "cameraImg" // 默认截图名称
static int serialNum = 0 //截图名称后面的数字累加
private String imageFormat// 图像文件的格式
private String defaultImageFormat = "png"//截图后缀
Dimension d = Toolkit.getDefaultToolkit().getScreenSize()//获取全屏幕的宽高尺寸等数据
public CameraTest() {
filePreStr = defName
imageFormat = defaultImageFormat
}
public CameraTest(String s, String format) {
filePreStr = s
imageFormat = format
}
public void snapShot() {
try {
// *** 核心代码 *** 拷贝屏幕到一个BufferedImage对象screenshot
BufferedImage screenshot = (new Robot()).createScreenCapture(new Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight()))
serialNum++
// 根据文件前缀变量和文件格式变量,自动生成文件名
String name = filePreStr + String.valueOf(serialNum) + "." + imageFormat
File f = new File(name)
System.out.print("Save File " + name)
// 将screenshot对象写入图像文件
ImageIO.write(screenshot, imageFormat, f)
System.out.print("..Finished!\n")
} catch (Exception ex) {
System.out.println(ex)
}
}
// 运行之后,即可将全屏幕截图保存到指定的目录下面<br>// 配合前端页面上面的选择尺寸等逻辑,传到后台,即可实现自由选择截图区域和大小的截图<br>
public static void main(String[] args) {
CameraTest cam = new CameraTest("d:\\Hello", "png")//
cam.snapShot()
}
}
主要是利用java的几个先有的函数,如Robot这个类的一个方法createScreenCapture一个获得一个任意大小的屏幕图像(在这里是全屏图像),而所谓的截图就是在这个图像上画出一个矩形,再利用上面的方法获得这部分的图像,程序中的cf.setAlwaysOnTop(true)是必需的看起来是在屏幕上截图,其实只是在一个在一个内镶有桌面背景的JFrame中截图。不知道还有没有其他的好方法~附上代码:
import java.awt.*
import java.awt.image.*
import java.awt.event.*
import java.io.File
import javax.imageio.ImageIO
import javax.swing.*
public class Camera {
/**
* @param args
*/
public static void main(String[] args) {
CameraJFrame cf=new CameraJFrame()
cf.setAlwaysOnTop(true)
cf.setUndecorated(true)
cf.setVisible(true)
}
}
class CameraJFrame extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L
Dimension di=Toolkit.getDefaultToolkit().getScreenSize()
public CameraJFrame()
{
setSize(di)
getContentPane().add(new CameraJPanel())
}
class CameraJPanel extends JPanel implements MouseListener,MouseMotionListener
{
/**
* flag主要是用来判别状态。
* 文件的格式名是unname+数字编号,格式是png
*/
private static final long serialVersionUID = 1L
BufferedImage bi,get
int startx,starty,endx,endy
int flag=1
String filename="unname"
String fileformat="png"
int count=1
public CameraJPanel()
{
try
{
Robot ro=new Robot()
bi=ro.createScreenCapture(new Rectangle(0,0,di.width,di.height))
}
catch(Exception e)
{
e.printStackTrace()
}
addMouseListener(this)
addMouseMotionListener(this)
}
public void paintComponent(Graphics g)
{
g.drawImage(bi,0,0,di.width,di.height,this)
g.setColor(Color.red)
g.drawRect(startx, starty, endx-startx, endy-starty)
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if(e.getButton()==MouseEvent.BUTTON3)
{
System.exit(0)
}
else if(e.getClickCount()==2)
{
try
{
Robot ro=new Robot()
get=ro.createScreenCapture(new Rectangle(startx,starty,endx-startx,endy-starty))
String name=filename+String.valueOf(count++)+"."+fileformat
File f=new File(name)
ImageIO.write(get, fileformat, f)
}
catch(Exception ex)
{
ex.printStackTrace()
}
flag=1//置flag为1,以便重新开始截图。
startx=starty=endx=endy=0
repaint()
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
if(flag==1)
{
startx=e.getX()
starty=e.getY()
}
}
public void mouseReleased(MouseEvent e) {
flag=0
}
public void mouseDragged(MouseEvent e) {
flag=1
endx=e.getX()
endy=e.getY()
repaint()
}
public void mouseMoved(MouseEvent e) {}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)