// Draw the image frame with certain parameters. func Draw(gc draw2d.GraphicContext, png string, dw, dh, margin, lineWidth float64) error { // Draw frame draw2dkit.RoundedRectangle(gc, lineWidth, lineWidth, dw-lineWidth, dh-lineWidth, 100, 100) gc.SetLineWidth(lineWidth) gc.FillStroke() // load the source image source, err := draw2dimg.LoadFromPngFile(png) if err != nil { return err } // Size of source image sw, sh := float64(source.Bounds().Dx()), float64(source.Bounds().Dy()) // Draw image to fit in the frame // TODO Seems to have a transform bug here on draw image scale := math.Min((dw-margin*2)/sw, (dh-margin*2)/sh) gc.Save() gc.Translate((dw-sw*scale)/2, (dh-sh*scale)/2) gc.Scale(scale, scale) gc.Rotate(0.2) gc.DrawImage(source) gc.Restore() return nil }
// Main draws a left hand and ear of a gopher. Afterwards it returns // the filename. This should only be used during testing. func Main(gc draw2d.GraphicContext, ext string) (string, error) { gc.Save() gc.Scale(0.5, 0.5) // Draw a (partial) gopher Draw(gc) gc.Restore() // Return the output filename return samples.Output("gopher", ext), nil }
// PathTransform scales a path differently in horizontal and vertical direction. func PathTransform(gc draw2d.GraphicContext, x, y, width, height float64) { gc.Save() gc.SetLineWidth(width / 10) gc.Translate(x+width/2, y+height/2) gc.Scale(1, 4) gc.ArcTo(0, 0, width/8, height/8, 0, math.Pi*2) gc.Close() gc.Stroke() gc.Restore() }
// Main draws the tiger func Main(gc draw2d.GraphicContext, ext string) (string, error) { gc.Save() // flip the image gc.Translate(0, 200) gc.Scale(0.35, -0.35) gc.Translate(70, -200) // Tiger postscript drawing tiger := samples.Resource("image", "tiger.ps", ext) // Draw tiger Draw(gc, tiger) gc.Restore() // Return the output filename return samples.Output("postscript", ext), nil }