I didn't know about image/draw, thank you! The linked doc has a very 
helpful example and references a a good blog post.

Am Dienstag, 5. September 2017 04:46:24 UTC+2 schrieb James Fargher:
>
> I think your ImageSetter is already in the standard library 
> https://golang.org/pkg/image/draw/#Image It's a little bit subtle because 
> different packages have the immutable Image and mutable Image
>
> It might save you some work by using golang.org/x/image library which 
> already has affine transforms. 
> https://godoc.org/golang.org/x/image/draw#Kernel.Transform
>
> On 4 September 2017 at 08:54, Florian Florensen <fl...@posteo.de 
> <javascript:>> wrote:
>
>> Hello,
>>
>> I'd like to rotate, scale, ... images by moving pixels using affine 
>> transformations. For example, the get a points x, y position after a 
>> translating it by m, n pixels, you can just add m resp n to x and y:
>>
>> x' = x + m
>> y' = y + n
>>
>>
>> So the task is basically just to iterate over the images pixels. This was 
>> done by directly accessing the Pix-slice 
>> <https://golang.org/pkg/image/#Paletted>, but not every every in-memory 
>> image has this field.
>>
>> The current solution uses reflection and is extracting the Set 
>> function (and, as a nice side effect, a new image with the same type and 
>> resolution as the input image):
>>
>> func getSet(im image.Image) (func(int, int, color.Color), image.Image, 
>> error) {
>>  set := func(x, y int, c color.Color) {}
>>  switch tmp := im.(type) {
>>  case *image.Alpha:
>>  im = image.NewAlpha(tmp.Rect)
>>  set = im.(*image.Alpha).Set
>>  ...
>>  default:
>>  return nil, nil, fmt.Errorf("%T has no function Set", im)
>>  }
>>  return set, im, nil
>> }
>>
>> My favourited approach would be to use an interface which adds Set it to 
>> image.Image. This works, but I obviously can't just throw an image.Image in.
>>
>> type ImageSetter interface {
>>  image.Image
>>  Set(int, int, color.Color)
>> }
>>
>> What would be a go-like solution for this task?
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to