2018-01-28 13:49:24 +01:00
<!DOCTYPE html>
< meta charset = "utf-8" >
< meta property = "og:image" itemprop = "image primaryImageOfPage" content = "https://hajimehoshi.github.io/ebiten/images/examples/highdpi.png" >
< meta name = "description" content = "Ebiten example - highdpi" >
< link rel = "shortcut icon" href = "../favicon.png" type = "image/png" >
< link rel = "icon" href = "../favicon.png" type = "image/png" >
< title > Ebiten example - highdpi< / title >
< link rel = "stylesheet" href = "../stylesheets/bootstrap.min.css" >
< link rel = "stylesheet" href = "../stylesheets/highlight-github.css" >
< link rel = "stylesheet" href = "../stylesheets/ebiten.css" >
< script src = "../scripts/googleanalytics.js" > < / script >
< nav class = "navbar" > < div class = "container" >
< nav class = "d-flex flex-row" style = "width: 100%;" >
< div class = "nav mr-auto" > < a class = "navbar-brand" href = "../" > < img src = "../images/logo_white.svg" alt = "EBITEN" > < / a > < / div >
< ul class = "nav" >
< li class = "nav-item" > < a class = "nav-link" href = "https://github.com/hajimehoshi/ebiten" > GitHub< / a > < / li >
< li class = "nav-item" > < a class = "nav-link" href = "https://godoc.org/github.com/hajimehoshi/ebiten" > GoDoc< / a > < / li >
< li class = "nav-item" > < a class = "nav-link" href = "https://github.com/hajimehoshi/ebiten/wiki" > Wiki< / a >
< li class = "nav-item" > < a class = "nav-link" href = "https://ebiten-playground.github.io/" > Playground< / a >
< / ul >
< / nav >
< / div > < / nav >
< main > < div class = "container" >
< h2 > Ebiten example - highdpi< / h2 >
< iframe src = "highdpi.content.html" width = "640" height = "480" > < / iframe >
2018-03-21 06:34:48 +01:00
< div class = "card" > < pre class = "card-body" > < code class = "language-go" > // + build example jsgo
2018-01-28 13:49:24 +01:00
package main
import (
" fmt"
" image"
_ " image/jpeg"
" log"
" net/http"
" github.com/hajimehoshi/ebiten"
" github.com/hajimehoshi/ebiten/ebitenutil"
)
var (
2018-01-29 15:39:30 +01:00
count int
highDPIImage *ebiten.Image
highDPIImageCh = make(chan *ebiten.Image)
2018-01-28 13:49:24 +01:00
)
func init() {
2018-01-29 15:39:30 +01:00
// Licensed under Public Domain
2018-01-28 13:49:24 +01:00
// https://commons.wikimedia.org/wiki/File:As08-16-2593.jpg
const url = " https://upload.wikimedia.org/wikipedia/commons/1/1f/As08-16-2593.jpg"
2018-01-29 15:39:30 +01:00
// Load the image asynchronously.
go func() {
res, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
img, _, err := image.Decode(res.Body)
if err != nil {
log.Fatal(err)
}
2018-02-13 18:59:22 +01:00
eimg, err := ebiten.NewImageFromImage(img, ebiten.FilterDefault)
2018-01-29 15:39:30 +01:00
if err != nil {
log.Fatal(err)
}
highDPIImageCh < - eimg
close(highDPIImageCh)
}()
}
2018-01-28 13:49:24 +01:00
2018-01-29 15:39:30 +01:00
func update(screen *ebiten.Image) error {
if highDPIImage == nil {
// Use select and ' default' clause for non-blocking receiving.
select {
case img := < -highDPIImageCh:
highDPIImage = img
default:
}
2018-01-28 13:49:24 +01:00
}
2018-01-29 15:39:30 +01:00
if ebiten.IsRunningSlowly() {
return nil
2018-01-28 13:49:24 +01:00
}
2018-01-29 15:39:30 +01:00
if highDPIImage == nil {
ebitenutil.DebugPrint(screen, " Loading the image..." )
2018-01-28 13:49:24 +01:00
return nil
}
scale := ebiten.DeviceScaleFactor()
sw, sh := screen.Size()
w, h := highDPIImage.Size()
op := & ebiten.DrawImageOptions{}
// Move the images' s center to the upper left corner.
op.GeoM.Translate(float64(-w)/2, float64(-h)/2)
// The image is just too big. Adjust the scale.
op.GeoM.Scale(0.25, 0.25)
2018-01-29 15:39:30 +01:00
2018-01-28 13:49:24 +01:00
// Scale the image by the device ratio so that the rendering result can be same
// on various (diffrent-DPI) environments.
op.GeoM.Scale(scale, scale)
// Move the image' s center to the screen' s center.
op.GeoM.Translate(float64(sw)/2, float64(sh)/2)
2018-02-13 18:59:22 +01:00
op.Filter = ebiten.FilterLinear
2018-01-28 13:49:24 +01:00
screen.DrawImage(highDPIImage, op)
ebitenutil.DebugPrint(screen, fmt.Sprintf(" Device Scale Ratio: %0.2f" , scale))
return nil
}
func main() {
const (
screenWidth = 640
screenHeight = 480
)
// Pass the invert of scale so that Ebiten' s auto scaling by device scale is disabled.
s := ebiten.DeviceScaleFactor()
if err := ebiten.Run(update, int(screenWidth*s), int(screenHeight*s), 1/s, " High DPI (Ebiten Demo)" ); err != nil {
log.Fatal(err)
}
}
< / code > < / pre > < / div >
< / div > < / main >
< footer > < div class = "container" >
< p > © 2013 Hajime Hoshi< / p >
< p > Code is licensed under < a href = "https://github.com/hajimehoshi/ebiten/blob/master/LICENSE" > the Apache License 2.0< / a > .< / p >
< p > The content of this page is licensed under < a href = "https://creativecommons.org/licenses/by/4.0/" > the Creative Commons Attribution 4.0 License< / a > .< / p >
< / div > < / footer >
< script src = "../scripts/highlight.pack.js" > < / script >
< script > hljs . initHighlightingOnLoad ( ) ; < / script >