For example, how to use CoreGraphics and CoreFoundation to manipulate the screen and process data on macOS.
1条回答 默认 最新
- dongyou5271 2016-12-21 14:19关注
Let's say we want to use CoreGraphics and CoreFoundation to capture the screen and get the image data:
package main // To use the two libraries we need to define the respective flags, include the required header files and import "C" immediately after import ( // #cgo LDFLAGS: -framework CoreGraphics // #cgo LDFLAGS: -framework CoreFoundation // #include <CoreGraphics/CoreGraphics.h> // #include <CoreFoundation/CoreFoundation.h> "C" "image" "reflect" "unsafe" // other packages... ) func main() { displayID := C.CGMainDisplayID() width := int(C.CGDisplayPixelsWide(displayID)) height := int(C.CGDisplayPixelsHigh(displayID)) rawData := C.CGDataProviderCopyData(C.CGImageGetDataProvider(C.CGDisplayCreateImage(displayID))) length := int(C.CFDataGetLength(rawData)) ptr := unsafe.Pointer(C.CFDataGetBytePtr(rawData)) var slice []byte hdrp := (*reflect.SliceHeader)(unsafe.Pointer(&slice)) hdrp.Data = uintptr(ptr) hdrp.Len = length hdrp.Cap = length imageBytes := make([]byte, length) for i := 0; i < length; i += 4 { imageBytes[i], imageBytes[i+2], imageBytes[i+1], imageBytes[i+3] = slice[i+2], slice[i], slice[i+1], slice[i+3] } C.CFRelease(rawData) img := &image.RGBA{Pix: imageBytes, Stride: 4 * width, Rect: image.Rect(0, 0, width, height)} // There we go, we can now save or process the image further }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算