Rumah  >  Artikel  >  pembangunan bahagian belakang  >  tangkapan skrin pelaksanaan golang

tangkapan skrin pelaksanaan golang

王林
王林asal
2023-05-16 12:47:381061semak imbas

Dalam beberapa tahun kebelakangan ini, apabila orang ramai semakin bergantung kepada Internet, banyak industri telah mula berubah ke arah pendigitalan. Antaranya, permintaan untuk komunikasi rangkaian dan kerja jauh semakin meningkat dari hari ke hari, dan pelbagai alat persidangan dalam talian dan kerja jauh juga telah muncul. Untuk senario aplikasi ini, fungsi tangkapan skrin telah menjadi fungsi yang sangat diperlukan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang, bahasa pengaturcaraan yang berkuasa, untuk melaksanakan fungsi tangkapan skrin.

Pengenalan Golang
Golang, juga dikenali sebagai bahasa Go, ialah bahasa pengaturcaraan yang baru muncul Matlamat reka bentuknya adalah untuk mudah dipelajari, cekap dan pantas, sambil memastikan keselamatan dan kebolehpercayaan kod. Golang mempunyai mekanisme pengumpulan sampah dan primitif pengaturcaraan serentak, yang sangat sesuai untuk pembangunan aplikasi Internet.

Pelaksanaan tangkapan skrin Golang
Di Golang, melaksanakan fungsi tangkapan skrin terbahagi terutamanya kepada langkah berikut:

  1. Pertama, anda perlu memperkenalkan beberapa pakej yang diperlukan, seperti imej dan syscall tunggu.

import (

"image"
"os"
"syscall"

)

  1. Seterusnya, anda perlu menggunakan fungsi sistem untuk mendapatkan maklumat tetingkap yang sedang berjalan dan mendapatkan tetingkap sistem pengendalian mengendalikan, dan kemudian anda boleh Tukar kepada objek imej dalam Golang.

func getScreenShot() ralat {

hwnd := syscall.GetForegroundWindow()
if hwnd == 0 {
    return fmt.Errorf("could not find foreground window")
}
dc := syscall.GetDC(hwnd)
defer syscall.ReleaseDC(hwnd, dc)
rect := &syscall.Rect{}
if !syscall.GetWindowRect(hwnd, rect) {
    return fmt.Errorf("could not get window rect")
}
width := rect.Right - rect.Left
height := rect.Bottom - rect.Top
img, err := image.NewRGBA(image.Rect(0, 0, width, height))
if err != nil {
    return err
}
return nil

}

  1. Kemudian, anda perlu mendapatkan data imej daripada konteks peranti dan menyimpannya ke dalam Golang objek imej.

piksel := make([]uint8, lebartinggi4)
_, _, err = syscall.BitBlt(0, 0, lebar, tinggi, dc , 0, 0, syscall.SRCCOPY)
if err != nil {

return err

}
bi := &syscall.Bitmapinfo{}
bi.BmiHeader.BiSize = uint32(unsafe. Sizeof(bi.BmiHeader))
bi.BmiHeader.BiWidth = lebar;
bi.BmiHeader.BiHeight = -height;
bi.BmiHeader.BiPlanes = 1
bi.BmiHeader =.Bi2Count
bi.BmiHeader.BiCompression = syscall.BI_RGB
bi.BmiHeader.BiSizeImage = uint32(len(piksel))
jika _, _, err = syscall.GetDIBits(dc, syscall.HBITMAP(syscall.HBITMAP(syscall.HBITMAP(syscall.HBITMAP) GetStockObject(syscall.BLACK_BRUSH)), 0, uint32(ketinggian), &pixels[0], bi, 0); ketinggian; y++ {

return err

}

Akhir sekali, simpan objek imej dalam Golang sebagai fail.

  1. fail, err := os.Create("screenshot.png")
  2. if err != nil {
for x := 0; x < width; x++ {
    i := (y*width + x) * 4
    R := pixels[i+2]
    G := pixels[i+1]
    B := pixels[i]
    img.Set(x, y, color.RGBA{R, G, B, 255})
}

}
tunda fail.Close()

jika err = png.Encode(file, img != nil {

return err

}

Pelaksanaan kod lengkap:

pakej utama

import (

return err

)

func getScreenShot() ralat {

"fmt"
"image"
"image/color"
"image/png"
"os"
"syscall"
"unsafe"

}

func main() {

rreee

}

Kesimpulan

Artikel ini menggariskan cara menggunakan Golang untuk melaksanakan fungsi tangkapan skrin. Golang ialah bahasa pengaturcaraan yang cekap, mudah dan selamat dengan prestasi serentak yang baik dan sesuai untuk pelbagai senario aplikasi. Melalui pengenalan artikel ini, saya percaya bahawa pembaca telah menguasai kemahiran menggunakan Golang untuk melaksanakan fungsi tangkapan skrin saya harap artikel ini dapat membantu semua orang.

Atas ialah kandungan terperinci tangkapan skrin pelaksanaan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:sistem penyebaran golangArtikel seterusnya:sistem penyebaran golang