技术好文:RobotJS截取屏幕screen.capture踩坑

简介: 技术好文:RobotJS截取屏幕screen.capture踩坑

"

调用 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 [/span> (bmp.width //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM5NzIyOA==.html

bmp.Height<span class=""token punctuation"">) 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</span>: screenshot.Width<span class=""token punctuation"">, Height</span>: 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</span>: screenshot.Width<span class=""token punctuation"">, Height</span>: screenshot.height });

screenJimp.getBuffer(jimp.MIME_PNG, //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1Mzc5Mg==.html

function (err, buffer) {

if (err) {

return;

}

const screen = cv.imdecode(Buffer.from(buffer)).cvtColor(cv.COLOR_BGR2RGB);

console.log(screen)

});


"
image.png
相关文章
[笔记]音视频学习之SDL篇《十四》简单的动画
[笔记]音视频学习之SDL篇《十四》简单的动画
|
移动开发 JavaScript 前端开发
|
5月前
|
机器学习/深度学习 算法 云计算
文字改视频技术:Rerender A Video
Rerender A Video 的实现技术结合了深度学习、计算机视觉、图像处理、GPU 加速和云计算等多种先进技术,旨在提供高效、优质的视频渲染和增强功能。
62 2
|
7月前
技术经验分享:AVFoundation播放视频时显示字幕,切换音轨
技术经验分享:AVFoundation播放视频时显示字幕,切换音轨
51 0
|
iOS开发
iOS开发-如何把广告,图片通过代码加到Screen上
iOS开发-如何把广告,图片通过代码加到Screen上
94 0
|
Java Python Windows
技术分享 | 网页 frame 与多窗口处理
技术分享 | 网页 frame 与多窗口处理