Golang简单图片显示实现

Golang简单图片显示实现 我有两个屏幕,想要获取显示器的分辨率,并在符合我所需分辨率的屏幕上显示一个简单的图像。我尝试使用SDL2,但遇到了非常烦人的问题,因为它需要处理事件。以下是我尝试的内容:

Pourya

在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 中实现简单的图片显示,并选择特定分辨率的屏幕,可以使用更轻量的库如 fynepixel,它们比 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 的文档或调整分辨率参数。

回到顶部