// 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 }
// Main draws a rotated face of the gopher. Afterwards it returns // the filename. This should only be used during testing. func Main(gc draw2d.GraphicContext, ext string) (string, error) { gc.SetStrokeColor(image.Black) gc.SetFillColor(image.White) gc.Save() // Draw a (partial) gopher gc.Translate(-60, 65) gc.Rotate(-30 * (math.Pi / 180.0)) Draw(gc, 48, 48, 240, 72) gc.Restore() // Return the output filename return samples.Output("gopher2", ext), nil }
// 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 }