mirror of
https://bitbucket.org/s_l_teichmann/mtsatellite
synced 2024-11-17 15:48:17 +01:00
Replace false rounding scaler with self written one.
This commit is contained in:
parent
25c189351c
commit
c67739fd77
@ -1,3 +1 @@
|
|||||||
* Use a scaler that uses the fact that tiles are powers of
|
|
||||||
two and do _not_ round up/or down nearest neighbor interpolation.
|
|
||||||
* Generate and use ETags to improve caching behavior.
|
* Generate and use ETags to improve caching behavior.
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
|
"image/color"
|
||||||
"image/png"
|
"image/png"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -19,9 +20,42 @@ import (
|
|||||||
"bitbucket.org/s_l_teichmann/mtredisalize/common"
|
"bitbucket.org/s_l_teichmann/mtredisalize/common"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/nfnt/resize"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func blowUp(src image.Image) *image.RGBA {
|
||||||
|
|
||||||
|
// TODO: Use fix point arithmetic, fast path for image.RGBA
|
||||||
|
|
||||||
|
dst := image.NewRGBA(image.Rect(0, 0, 256, 256))
|
||||||
|
|
||||||
|
sw, sh := src.Bounds().Dx(), src.Bounds().Dy()
|
||||||
|
|
||||||
|
dx := float32(sw) / float32(256)
|
||||||
|
dy := float32(sh) / float32(256)
|
||||||
|
|
||||||
|
bx, by := src.Bounds().Min.X, src.Bounds().Min.Y
|
||||||
|
|
||||||
|
py := float32(by)
|
||||||
|
for y := 0; y < 256; y++ {
|
||||||
|
sy := int(py)
|
||||||
|
ox := -1
|
||||||
|
px := float32(bx)
|
||||||
|
var col color.Color
|
||||||
|
for x := 0; x < 256; x++ {
|
||||||
|
sx := int(px)
|
||||||
|
if sx != ox { // Minimize interface indirection access.
|
||||||
|
ox = sx
|
||||||
|
col = src.At(sx, sy)
|
||||||
|
}
|
||||||
|
dst.Set(x, y, col)
|
||||||
|
px += dx
|
||||||
|
}
|
||||||
|
py += dy
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
func toUint(s string) uint {
|
func toUint(s string) uint {
|
||||||
var err error
|
var err error
|
||||||
var x int
|
var x int
|
||||||
@ -102,8 +136,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
img = si.SubImage(image.Rect(int(xo), int(yo), int(xo+w), int(yo+w)))
|
img = si.SubImage(image.Rect(int(xo), int(yo), int(xo+w), int(yo+w)))
|
||||||
//fmt.Printf("%s\n", img.Bounds())
|
img = blowUp(img)
|
||||||
img = resize.Resize(256, 256, img, resize.NearestNeighbor)
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
if err := png.Encode(&buf, img); err != nil {
|
if err := png.Encode(&buf, img); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user