duanqiang3925 2016-12-21 14:19
浏览 110
已采纳

如何在Go中使用macOS / OS X框架

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 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算