Use github.com/bamiaux/rez instead of github.com/nfnt/resize for resampling the pyramid tiles. It is much faster but needs some testing.

This commit is contained in:
Sascha L. Teichmann
2015-12-25 22:07:54 +01:00
parent 6ae5936de9
commit f658d12641
3 changed files with 34 additions and 12 deletions

View File

@ -18,7 +18,7 @@ import (
"bitbucket.org/s_l_teichmann/mtsatellite/common"
"github.com/nfnt/resize"
"github.com/bamiaux/rez"
)
func findMaxDir(files []os.FileInfo) (min, max int) {
@ -155,7 +155,7 @@ var dps = [4]image.Point{
image.Pt(256, 256),
image.Pt(256, 0)}
func fuseTile(scratch *image.RGBA, job *pyramidJob) error {
func fuseTile(scratch, resized *image.RGBA, conv rez.Converter, job *pyramidJob) error {
for i, path := range job.src {
@ -167,7 +167,9 @@ func fuseTile(scratch *image.RGBA, job *pyramidJob) error {
draw.Draw(scratch, r, img, sr.Min, draw.Src)
}
resized := resize.Resize(256, 256, scratch, resize.Lanczos3)
if err := conv.Convert(resized, scratch); err != nil {
return err
}
log.Printf("Writing pyramid tile '%s'.\n", job.dst)
@ -177,9 +179,22 @@ func fuseTile(scratch *image.RGBA, job *pyramidJob) error {
func fuseTiles(jobs chan pyramidJob, done *sync.WaitGroup) {
defer done.Done()
scratch := image.NewRGBA(image.Rect(0, 0, 512, 512))
resized := image.NewRGBA(image.Rect(0, 0, 256, 256))
cfg, err := rez.PrepareConversion(resized, scratch)
if err != nil {
log.Printf("WARN: cannot prepare rescaling: %s\n", err)
return
}
conv, err := rez.NewConverter(cfg, common.ResizeFilter)
if err != nil {
log.Printf("WARN: Cannot create image converter: %s\n", err)
return
}
for job := range jobs {
if err := fuseTile(scratch, &job); err != nil {
if err := fuseTile(scratch, resized, conv, &job); err != nil {
log.Printf("WARN: Writing image failed: %s\n", err)
}
}