Golang简单图片显示实现
Golang简单图片显示实现 我有两个屏幕,想要获取显示器的分辨率,并在符合我所需分辨率的屏幕上显示一个简单的图像。我尝试使用SDL2,但遇到了非常烦人的问题,因为它需要处理事件。以下是我尝试的内容:
在Go的Goroutine中运行和使用SDL
标签: image, go, graphics, sdl
有人能告诉我更简单的方法吗?我仍然对SDL2有问题。
更多关于Golang简单图片显示实现的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang简单图片显示实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Go 中实现简单的图片显示,并选择特定分辨率的屏幕,可以使用更轻量的库如 fyne 或 pixel,它们比 SDL2 更易于处理图形和窗口管理。以下是一个使用 fyne 库的示例,它自动处理事件循环,无需手动管理。
首先,安装 fyne 库:
go mod init your-project
go get fyne.io/fyne/v2
然后,编写代码获取屏幕分辨率,并在符合条件的屏幕上显示图像。假设你有一个名为 “image.png” 的图片文件。
package main
import (
"fmt"
"image/color"
"log"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/storage"
)
func main() {
// 创建应用
myApp := app.New()
myWindow := myApp.NewWindow("Image Display")
// 获取所有屏幕
screens := fyne.CurrentApp().Driver().AllScreens()
var targetScreen *fyne.Screen
desiredWidth, desiredHeight := 1920, 1080 // 设置所需分辨率,例如 1920x1080
// 遍历屏幕,查找符合分辨率的屏幕
for _, screen := range screens {
width := screen.CanvasSize().Width
height := screen.CanvasSize().Height
fmt.Printf("Screen: %dx%d\n", int(width), int(height))
if int(width) == desiredWidth && int(height) == desiredHeight {
targetScreen = &screen
break
}
}
if targetScreen == nil {
log.Fatal("No screen found with the desired resolution")
}
// 设置窗口在目标屏幕上显示
myWindow.SetFullScreen(true) // 全屏显示,或使用 myWindow.Resize(fyne.NewSize(float32(desiredWidth), float32(desiredHeight)))
myWindow.SetPosition((*targetScreen).Position)
// 加载并显示图像
fileURI := storage.NewFileURI("./image.png") // 替换为你的图片路径
imageResource, err := storage.LoadResourceFromURI(fileURI)
if err != nil {
log.Fatal("Failed to load image:", err)
}
image := canvas.NewImageFromResource(imageResource)
image.FillMode = canvas.ImageFillContain // 调整图像填充模式
// 创建容器并设置内容
content := container.NewMax(image)
myWindow.SetContent(content)
// 显示窗口并运行应用
myWindow.ShowAndRun()
}
代码说明:
- 获取屏幕分辨率:使用
fyne.CurrentApp().Driver().AllScreens()获取所有屏幕的列表,并遍历查找符合所需分辨率(例如 1920x1080)的屏幕。 - 设置窗口:将窗口设置为全屏或在目标屏幕上定位,确保图像显示在正确的屏幕上。
- 加载图像:通过
canvas.NewImageFromResource从文件加载图像,并设置填充模式以适应窗口。 - 事件处理:
fyne自动处理窗口事件(如关闭),无需手动管理事件循环。
注意事项:
- 确保图片文件 “image.png” 存在于工作目录中,或提供正确的路径。
- 如果未找到符合分辨率的屏幕,程序会退出并报错;你可以根据需要调整分辨率检查逻辑(例如使用范围而非精确匹配)。
- 使用
go run main.go运行程序。
这种方法避免了 SDL2 的复杂性,简化了图像显示过程。如果遇到问题,请检查 fyne 的文档或调整分辨率参数。


