gpt4 book ai didi

image - 如何从 Windows 剪贴板获取图像数据

转载 作者:行者123 更新时间:2023-12-01 20:19:48 33 4
gpt4 key购买 nike

我正在尝试用 Golang 编写一个程序来从 Windows 剪贴板中获取图像数据。

我明白 there is a plugin for getting data from Windows Clipboard ,问题是它不支持图像数据,只支持文本。基本上不是我想要的。

package main

import ("fmt"
"github.com/atotto/clipboard"
)


func main() {
str,err:=clipboard.ReadAll()
if err!=nil {
fmt.Println(err)
}else {
fmt.Println(str)
}
}

这将输出“操作成功完成”。如果剪贴板包含图像,则会出错。

知道如何做到这一点吗?

更新!:

我试过了 CF_BITMAPGetClipboardData , 返回位图 (Hbitmap) 的句柄。我不熟悉处理它,但显然它是一个长无符号数?

无论如何,我尝试了一些谷歌搜索来到 this .使用函数 GdipCreateBitmapFromHBITMAP :
var Bitmap *win.GpBitmap
pBitmap := &Bitmap
fmt.Println(win.GdipCreateBitmapFromHBITMAP(win.HBITMAP(Hbitmap),0,pBitmap))

我得到了一个“ok”的输出,但位图是空的。我又被卡住了。

我应该如何存储位图?

最佳答案

问题
github.com/atotto/clipboard包似乎专门针对文本操作,并且它是跨平台的,所以这就是您所得到的。

在 Windows™ 上,程序包使用标准 Win32 API 来访问剪贴板。
具体来说,this statement调用 GetClipboardData() 通过它 CF_UNICODETEXT 格式参数,这就是操作成功完成的原因:它返回剪贴板包含的文本(在您的情况下 - 无,空字符串)。

解决方案

直接的解决方案是从该包中复制特定于 Windows 的代码的相关位并修改对 GetClipboardData 的调用中的参数。至 CF_BITMAP反而。

一个更复杂的解决方案可能是首先对 EnumClipboardFormats() 执行一系列调用。并找出是否有任何图像数据( CF_BITMAP )可用,然后调用 GetClipboardData只有在这种情况下。

关于image - 如何从 Windows 剪贴板获取图像数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58892286/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com