当前位置: 首页 > 面试题库 >

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

任绪
2023-03-14
问题内容

例如,如何使用CoreGraphics和CoreFoundation在macOS上操纵屏幕和处理数据


问题答案:

假设我们要使用CoreGraphics和CoreFoundation捕获屏幕并获取图像数据:

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
    }


 类似资料:
  • 问题内容: 在新的Go语言中,如何调用C 代码?换句话说,如何包装我的C 类并在Go中使用它们? 问题答案: 更新: 我已经成功地将一个小型测试C ++类与Go链接在一起 如果您使用C接口包装C ++代码,则应该可以使用cgo调用您的库(请参阅中的gmp示例)。 我不确定C ++中的类概念是否真的可以在Go中表达,因为它没有继承。 这是一个例子: 我有一个C ++类定义为: 我想在Go中使用。我将

  • 如果我写,酿造医生 帮帮我....我想用自制软件下载节点,我想解决所有警告...........

  • 问题内容: 尝试使用Go的http包时,我无法确定的语法。尽管我尝试了其他一些被编译器拒绝的其他事情,但这里只有我标记的以下内容是我必须编译的。 该URL可以,因为可以正常使用,但是在我运行时,它只是一个空字符串,并且始终为零。我需要怎么做才能取出数据?编译器拒绝了其他尝试。 输出看起来像这样: 问题答案: 尝试给切片buf设置一个大小,例如 读取器最多读取给定缓冲区的len()。 来自io.go

  • 问题内容: 我需要在Go中对int64的较大值执行运算,例如求幂和除法,但是我遇到了溢出问题。我尝试将它们转换为float64,但随后遇到其他问题。这是我尝试过的。 我有一个整数变量,必须将其转换为float64才能使用方便的数学包(https://golang.org/pkg/math)。 但是,如果整数变量太大,则无法正确转换。我假设这是因为大小大于float64。例如: 我正在尝试使用mat

  • 问题内容: 我正在使用Vector类型存储字节数组(可变大小) 一切正常,但是当我尝试检索值时,编译器告诉我我需要使用类型断言。所以我添加了这些,然后尝试 但是当我运行它时,它会失败: 是否知道如何从Vector用于存储其数据的空Element接口中“投射” /转换为实际的[] byte数组,然后供以后使用? 更新(Go1): 矢量软件包已于2011-10-18删除。 问题答案: 这对我来说很好。

  • 问题内容: 我在Xcode中创建了一个空项目。 当我按下运行按钮时,它显示一个窗口。如何更改其外观,例如窗口的透明度等。 我已经搜索了很多,但是每个人都使用变量来像这里一样进行更改,但是如何创建实例? 我是Mac应用程序开发的新手。有人可以写一个详细的答案吗? 谢谢! 问题答案: 您可以按如下方式获取应用程序窗口的实例: 从NSApp获取窗口(共享应用程序实例的全局常量): 或覆盖或访问视图的wi