电脑为什么截不了java页面的图,电脑为什么截不了java页面的图?

电脑为什么截不了java页面的图,电脑为什么截不了java页面的图?,第1张

电脑截不了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) {}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11939436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存