go语言实现屏幕截图的示例代码

目录
  • 借助第三方库
  • 安装
  • 自定义截图 Capture
  • 全屏截图 CaptureDisplay
  • 获取活动显示器数量 NumActiveDisplays
  • 获取指定屏幕显示范围 GetDisplayBounds
  • 获取自定义矩形区域的截图 CaptureRect
  • 演示

借助第三方库

https://github.com/kbinani/screenshot

安装

go get github.com/kbinani/screenshot

方法

详情查看
https://pkg.go.dev/github.com/vova616/screenshot

自定义截图 Capture

func Capture(x, y, width, height int) (*image.RGBA, error)

返回指定桌面区域的屏幕截图。x,y是起点坐标, width,height 是图片的宽和高。

全屏截图 CaptureDisplay

func CaptureDisplay(displayIndex int) (*image.RGBA, error)

返回全屏截图。 displayIndex 是显示编号,默认屏幕是0,如果外接多个显示,则是1,2,3,4 … 。

获取活动显示器数量 NumActiveDisplays

func NumActiveDisplays()int

返回活动的显示器的数量。

获取指定屏幕显示范围 GetDisplayBounds

func GetDisplayBounds(displayIndex int) image.Rectangle

GetDisplayBounds返回displayIndex的显示范围, 范围从(0,0) 坐标开始,当前屏幕分辨率结束 ,例如:(0,0)-(1920,1080)。

获取自定义矩形区域的截图 CaptureRect

func CaptureRect(rect image.Rectangle) (*image.RGBA, error)

捕获桌面的指定区域。跟Capture类似,主要搭配GetDisplayBounds 使用。
参数是一个矩形,即两个点,一个最小点,一个最大点

演示

package main

import (
    "fmt"
    "github.com/kbinani/screenshot"
    "image"
    "image/png"
    "os"
)

// save *image.RGBA to filePath with PNG format.
func save(img *image.RGBA, filePath string) {
    file, err := os.Create(filePath)
    if err != nil {
        panic(err)
    }
    defer file.Close()
    png.Encode(file, img)
}
func main() {

    //自定义截图
    img, err := screenshot.Capture(0, 0, 500, 500)
    if err != nil {
        panic(err)
    }
    save(img, "自定义.png")

    //获取所有活动屏幕
    n := screenshot.NumActiveDisplays()
    if n <= 0 {
        panic("没有发现活动的显示器")
    }

    //全屏截取所有活动屏幕
    if n > 0 {
        for i := 0; i < n; i++ {
            img, err = screenshot.CaptureDisplay(i)
            if err != nil {
                panic(err)
            }
            fileName := fmt.Sprintf("第%d屏幕截图.png", i)
            save(img, fileName)
        }
    }

    //使用 Rectangle 自定义截图
    // 获取第一个屏幕显示范围
    var new image.Rectangle = image.Rect(0, 0, 600, 700)
    img, err = screenshot.CaptureRect(new)
    if err != nil {
        panic(err)
    }
    save(img, "new.png")

    //使用 GetDisplayBounds获取指定屏幕显示范围,全屏截图
    bounds := screenshot.GetDisplayBounds(0)
    img, err = screenshot.CaptureRect(bounds)
    if err != nil {
        panic(err)
    }
    save(img, "all.png")

    //使用Union获取指定屏幕 矩形最小点和最大点
    var all image.Rectangle = image.Rect(0, 0, 0, 0)
    bounds1 := screenshot.GetDisplayBounds(0)
    all = bounds1.Union(all)
    fmt.Println(all.Min.X, all.Min.Y, all.Dx(), all.Dy())

}

到此这篇关于go语言实现屏幕截图的示例代码的文章就介绍到这了,更多相关go语言屏幕截图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang快速实现网页截图的方法

    golang是近几年发展非常迅猛的一款服务器端的语言,其生态也日益丰富.对于使用golang实现网页截图这个需求,笔者在经过一番调研之后发现大家有推荐Selenium方案,但是这一方案问题较多: 需要安装Selenium或是PhantomJS PhantomJS已经停止维护了 Selenium的运行需要安装chromedriver chromedriver对chrome的版本有一定要求 还有推荐headless chrome方案的,但是这一方案也需要自行在服务器端安装一款浏览器,对服务器的压力比

  • go语言实现屏幕截图的示例代码

    目录 借助第三方库 安装 自定义截图 Capture 全屏截图 CaptureDisplay 获取活动显示器数量 NumActiveDisplays 获取指定屏幕显示范围 GetDisplayBounds 获取自定义矩形区域的截图 CaptureRect 演示 借助第三方库 https://github.com/kbinani/screenshot 安装 go get github.com/kbinani/screenshot 方法 详情查看https://pkg.go.dev/github.c

  • C语言责任链模式示例代码

    目录 介绍: 作用: 类比: 示例: 总结 介绍: ​ 责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者: 作用: 将请求按照链的方式一一传递 类比: ​ 公司申请报销,首先要leader审批通过,然后是HR,再然后是财务,最后是老板,一级一级的将请求传递: 示例: #include <stdio.h> #include <assert.h> #include "list.h&q

  • Go语言实现枚举的示例代码

    在编程领域里,枚举用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机.拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应. 在刚开始学编程的时候,你一定写过,至少见过直接使用魔术数字进行判断的代码.啥叫魔术数字呢,举个例子,要置顶一个文章的时候先判断文章是不是已发布状态. if (article.state == 2) {    // state 2 代表文章已发布 } 假如我们的代码里没有注释,或者等我们项目的代码里充斥着这些魔术数字

  • C语言打印杨辉三角形的示例代码

    目录 1. 题目描述 2. 解题思路 3. 动图演示 4. 代码实现 Step1 Step2 居中显示 5. 完整代码 6. 特性总结 1. 题目描述 杨辉三角形 解题之前,我们先来了解一下杨辉三角形到底是什么? 杨辉三角形,又称帕斯卡三角形.贾宪三角形.海亚姆三角形,它的排列形如三角形. 因为首现于南宋杨辉的<详解九章算法>得名,而书中杨辉说明是引自贾宪的<释锁算书>,故又名贾宪三角形. 古代波斯数学家欧玛尔·海亚姆也描述过这个三角形.在欧洲,因为法国数学家布莱兹‧帕斯卡在165

  • C语言实现栈的示例代码

    目录 一.了解栈的结构特点 二.具体实现 补充 栈的用处 一.了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出. 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶 出栈:栈的删除操作叫做出栈.出数据也在栈顶 二.具体实现 由于栈实质是一种线性表,因此可以用两种方式来实现:顺序表  或  链表 这里我使用的是类似顺序表的方式来实现. 代码如下: typedef char Stacktype; typedef struct Stack { int top; S

  • C语言实现通讯录的示例代码

    目录 一.Contact.h文件 二.Contact.c文件 三.test.c文件 一.Contact.h文件 包含函数的声明 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #define MAX 100 #define MAX_NAME 20 #defi

  • c语言中&的用法示例代码

    1.用于指针赋值 #include<stdio.h> int main() { int a = 2; int*b;//定义一个整形指针 b = &a;//给指针赋值,使指针指向a的地址 printf("%d", b);//输出的是a的地址 printf("\n");//换行符 printf("%d", *b);//*的作用是解引用,取出指针指向地址的内容,达到简 return 0; } 2.用于二目运算中的按位(位运算)与运算

  • c语言实现基数排序解析及代码示例

    1. 基数排序(radixsort)属于"分配式排序"(distributionsort),又称"桶子法"(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶"中,藉以达到排序的作用. 2.基数排序的实现方法分为两种: 最高位优先(MostSignificantDigitfirst)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码

  • R语言基本运算的示例代码

    1.基本运算 1.1 加.减.乘.除 + - * / 在赋值中可以使用=,也可以使用<-. 1.2余数.整除 %% %/% 1.3 取绝对值 abs() 判断正负号sign() 1.4幂指数 ^ 平方根sqart () 1.5 以二为底的对数:log2() 以十为底的对数:log10() 自定义底的对数:log(c,base=) 自然常数e的对数:log(a,base=exp(1)) 2.向量运算 向量是有相同基本类型的元素序列,一维数组,定义向量的最常用办法是使用函数c(),它把若干个数值或字

  • 用R语言实现霍夫曼编码的示例代码

    可读性极低,而且其实也没必要用R语言写,图个乐罢了 p=c(0.4,0.2,0.2,0.1,0.1)###输入形如c(0.4,0.2,0.2,0.1,0.1)的概率向量,即每个待编码消息的发生概率 p1=p###将概率向量另存,最后计算编码效率要用 mazijuzhen=matrix(,nrow=length(p),ncol=length(p)-1)###码字矩阵:第i行对应向量p的第i个分量所对应的那个待编码消息的编码后的码字 group=matrix(c(1:length(p),rep(NA

随机推荐