首页 > 其他分享 >RobotJS截取屏幕screen.capture踩坑

RobotJS截取屏幕screen.capture踩坑

时间:2023-04-17 21:23:22浏览次数:40  
标签:capture RobotJS const screenshot screen jimp bmp image

调用 robot.screen.capture() 或 robot.screen.capture(0,0,1920,1080),返回的Bitmap对象是色彩格式是BGR色彩,这导致了如果未经处理就直接生成图像,色彩会产生错误,只需将BGR色彩转换成RGB色彩即可。

const robot = require('robotjs');
const jimp = require("jimp");

const swapRedAndBlueChannel = bmp => {
    for (let i = 0; i < (bmp.width * bmp.height) * 4; i += 4) { // swap red and blue channel
        [bmp.image[i], bmp.image[i + 2]] = [bmp.image[i + 2], bmp.image[i]]; // red channel;
    }
};

const screenshot = robot.screen.capture();
swapRedAndBlueChannel(screenshot);
const screenJimp = new jimp({ data: screenshot.image, width: screenshot.width, height: screenshot.height });

screenJimp.write('screenshot.png');

如果你有使用OpenCV,则可以使用“COLOR_BGR2RGB”函数直接转换

const cv = require('@u4/opencv4nodejs');
const robot = require('robotjs');
const jimp = require("jimp");


const screenshot = robot.screen.capture();
const screenJimp = new jimp({ data: screenshot.image, width: screenshot.width, height: screenshot.height });

screenJimp.getBuffer(jimp.MIME_PNG, function (err, buffer) {
    if (err) {
        return;
    }
    const screen = cv.imdecode(Buffer.from(buffer)).cvtColor(cv.COLOR_BGR2RGB);
    console.log(screen)
});

标签:capture,RobotJS,const,screenshot,screen,jimp,bmp,image
From: https://www.cnblogs.com/mydyxy/p/17327555.html

相关文章

  • r0capture 原理分析
    r0capture是比较好用的抓包工具仅限安卓平台,测试安卓7、8、9、10、11、12可用;无视所有证书校验或绑定,不用考虑任何证书的事情;通杀TCP/IP四层模型中的应用层中的全部协议;通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;通杀所有应用层框......
  • screenfetch报错 /usr/bin/screenfetch: 行 1851: -: 语法错误:需要操作数(错误记号是 "
    在debian12(testing)上运行screenfetch报错,如下所示:~$screenfetch/usr/bin/screenfetch:行1851:-:语法错误:需要操作数(错误记号是"-")_,met$$$$$gg.×××××@deb-test,g$$$$$$$$$$$$$$$P.OS:Debian12bookworm,g$$P""&q......
  • ScreenSaverNow for Mac(菜单栏防休眠工具) 1.75激活版
    想要一款菜单栏屏幕工具?推荐您使用ScreenSaverNowMac中文版,安装后可自定义的全局热键或鼠标单击立即激活您的屏幕保护程序。当您离开Mac时但仍需要保持工作状态时,ScreenSaverNowforMac将屏幕保护程序与密码一起使用很可能是保护您的信息免受他人侵害的唯一方法。ScreenSaverNow......
  • Linux shell command screen All In One
    LinuxshellcommandscreenAllInOnescreen#screen$screen--helpUse:screen[-opts][cmd[args]]or:screen-r[host.tty]Options:-aForceallcapabilitiesintoeachwindow'stermcap.-A-[r|R]Adaptallwindowstothenewdis......
  • Vue进阶(四十九):在Webapp上使用input:file, 指定capture属性调用默认相机,摄像,录音功能
    在webapp上使用input:file,指定capture属性调用默许相机,摄像,录音功能。在webapp上使用input:file,指定capture属性调用默认相机,摄像,录音功能在iOS6下开发webapp,使用input之file,很有用<inputtype="file"accept="image/*"capture="camera"><inputtype="file"acce......
  • Capture One快捷键
    文件新会话... Ctrl+N新目录… Ctrl+Shift+N打开… Ctrl+O导入图像 Ctrl+Shift+I移动到选择文件夹 Ctrl+J重命名图像 F2删除(D) Ctrl+Delete永久删除 Alt+Delete处理 Ctrl+D打印 Ctrl+P编辑撤销(R) Ctrl+Y取消全选 Ctrl+Shift+A反向选择 Ctrl+I选择上一个 Ctrl+Le......
  • js中e.clientX e.pageX e.offsetX e.screenX之间的区别
     event.clientX、event.clientY鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性event.pageX、event.pageY类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但......
  • 使用 minScreenWidth 调整 sap.m.Table 某一列动态显示与否的例子
    对于SAPUI5响应式表格来说,不应隐藏名称和状态列是列的默认行为,所以让我们让默认值(minScreenWidth:""和demandPopin:false)发挥作用。下图是一个例子:如果visible设置......
  • CALL SCREEN - 弹出框屏幕的Window坐标设置
    标准语法如下:CALLSCREENdynnr[STARTINGATcol1lin1[ENDINGATcol2lin2]]."Theupperleftcornerofthedialogwindowisdeter......
  • chrome谷歌浏览器崩溃无法使用(错误代码:Crashpad_FailedToCaptureProcess)
    错误代码:Crashpad_FailedToCaptureProcess 解决方法:1。点击chrome浏览器快捷图标,然后右击选择属性。  2。在目标位置后面先打一个空格,然后后面加上--test-type......