From c98501060f15cbb5db6497385d596e7893f98cbe Mon Sep 17 00:00:00 2001 From: raa0121 Date: Thu, 4 Aug 2022 00:43:31 +0900 Subject: [PATCH] ebitenutil: add `NewImageFromFileSystem()` (#2230) Closes #1948 --- ebitenutil/fs_go116.go | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 ebitenutil/fs_go116.go diff --git a/ebitenutil/fs_go116.go b/ebitenutil/fs_go116.go new file mode 100644 index 000000000..95782f34a --- /dev/null +++ b/ebitenutil/fs_go116.go @@ -0,0 +1,43 @@ +// Copyright 2022 The Ebitengine Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License + +//go:build go1.16 +// +build go1.16 + +package ebitenutil + +import ( + "image" + "io/fs" + + "github.com/hajimehoshi/ebiten/v2" +) + +// NewImageFromFileSystem create an image from the specified file system. +// +// Image decoders must be imported when using NewImageFromReader. For example, +// if you want to load a PNG image, you'd need to add `_ "image/png"` to the import section. +func NewImageFromFileSystem(fs fs.FS, path string) (*ebiten.Image, image.Image, error) { + file, err := fs.Open(path) + if err != nil { + return nil, nil, err + } + defer file.Close() + img, _, err := image.Decode(file) + if err != nil { + return nil, nil, err + } + img2 := ebiten.NewImageFromImage(img) + return img2, img, nil +}