From a3bf8ebf830ef5e429d3425ffb38f3f81fbc0927 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Thu, 22 Mar 2018 01:19:57 +0900 Subject: [PATCH] ebitenutil: Add NewImageFromURL --- ebitenutil/url.go | 44 ++++++++++++++++++++++++++++++++++++++++ examples/highdpi/main.go | 18 ++-------------- 2 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 ebitenutil/url.go diff --git a/ebitenutil/url.go b/ebitenutil/url.go new file mode 100644 index 000000000..91e40f8b4 --- /dev/null +++ b/ebitenutil/url.go @@ -0,0 +1,44 @@ +// Copyright 2018 The Ebiten 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. + +package ebitenutil + +import ( + "image" + "net/http" + + "github.com/hajimehoshi/ebiten" +) + +// NewImageFromURL creates a new ebiten.Image from the given URL. +// +// Image decoders must be imported when using this function. For example, +// if you want to load a PNG image, you'd need to add `_ "image/png"` to the import section. +// +// FilterDefault is used at NewImgeFromImage internally. +func NewImageFromURL(url string) (*ebiten.Image, error) { + res, err := http.Get(url) + if err != nil { + return nil, err + } + defer res.Body.Close() + + img, _, err := image.Decode(res.Body) + if err != nil { + return nil, err + } + + eimg, _ := ebiten.NewImageFromImage(img, ebiten.FilterDefault) + return eimg, nil +} diff --git a/examples/highdpi/main.go b/examples/highdpi/main.go index 537182fc1..609b4a426 100644 --- a/examples/highdpi/main.go +++ b/examples/highdpi/main.go @@ -18,10 +18,8 @@ package main import ( "fmt" - "image" _ "image/jpeg" "log" - "net/http" "github.com/hajimehoshi/ebiten" "github.com/hajimehoshi/ebiten/ebitenutil" @@ -40,23 +38,11 @@ func init() { // Load the image asynchronously. go func() { - res, err := http.Get(url) + img, err := ebitenutil.NewImageFromURL(url) if err != nil { log.Fatal(err) } - defer res.Body.Close() - - img, _, err := image.Decode(res.Body) - if err != nil { - log.Fatal(err) - } - - eimg, err := ebiten.NewImageFromImage(img, ebiten.FilterDefault) - if err != nil { - log.Fatal(err) - } - - highDPIImageCh <- eimg + highDPIImageCh <- img close(highDPIImageCh) }() }