ebiten: allow passing ebiten.Image to NewImageFromImage

Closes #1917
This commit is contained in:
Hajime Hoshi
2022-04-02 06:10:20 +09:00
parent 3fafc05411
commit 9ddcf58728
2 changed files with 54 additions and 0 deletions

View File

@@ -808,11 +808,22 @@ func NewImage(width, height int) *Image {
// Reusing the same image by Clear is much more efficient than creating a new image.
//
// NewImageFromImage panics if RunGame already finishes.
//
// The returned image's origin is always (0, 0). The source's bounds are not respected.
func NewImageFromImage(source image.Image) *Image {
if isRunGameEnded() {
panic(fmt.Sprintf("ebiten: NewImage cannot be called after RunGame finishes"))
}
// If the given image is an Ebiten image, use DrawImage instead of reading pixels from the source.
// This works even before the game loop runs.
if source, ok := source.(*Image); ok {
size := source.Bounds().Size()
i := NewImage(size.X, size.Y)
i.DrawImage(source, nil)
return i
}
size := source.Bounds().Size()
width, height := size.X, size.Y
if width <= 0 {