From 0d476688ddc54151735a17009a40b98b5042f24d Mon Sep 17 00:00:00 2001 From: Charles Iliya Krempeaux Date: Fri, 9 Feb 2024 11:12:33 -0800 Subject: [PATCH] initial commits --- image.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 image.go diff --git a/image.go b/image.go new file mode 100644 index 0000000..2203c43 --- /dev/null +++ b/image.go @@ -0,0 +1,61 @@ +package imgrow + +import ( + "image" + "image/color" +) + +// Image returns an image that is 'img' scalad by 'scalar'. +// +// So, for example: +// +// var newImage image.Image = imgrow.Image(2, oldImage) +// +// ... would return a new image that is just like 'oldImage' except that it is 2 times as big. +func Image(scalar int, img image.Image) image.Image { + return internalImage { + img:img, + scalar:scalar, + } +} + +var _ image.Image = &internalImage{} + +type internalImage struct { + img image.Image + scalar int +} + +func (receiver internalImage) At(x, y int) color.Color { + var img image.Image = receiver.img + + if nil == img { + return nil + } + + var scalar int = receiver.scalar + + x2, y2 := inverseScaleXY(scalar, x, y) + + return img.At(x2, y2) +} + +func (receiver internalImage) Bounds() image.Rectangle { + var img image.Image = receiver.img + + if nil == img { + return image.Rectangle{} + } + + return scaleRectangle(receiver.scalar, img.Bounds()) +} + +func (receiver internalImage) ColorModel() color.Model { + var img image.Image = receiver.img + + if nil == img { + return nil + } + + return img.ColorModel() +}