Email or username:

Password:

Forgot your password?
Devine Lu Linvega

Spending the day anchored, not moving for once. Enjoying some image programming coding to music. The Go tool I normally use to dither my images doesn't work on the pinebook, and firefox is fucked, so I can't use dither-it. So, to make my slides for SL23, I'll use this thing that assigns patterns to a gradient. I think it'll work out.

10 comments
Nina Kalinina

@neauoire does this one work maybe? gazs.github.io/canvas-atkinson
Also there's a decent ditherer in GIMP, if you have it

lhp

@neauoire Naive RNG based dithering is actually quite simple to implement, should you have a way to load an image, iterate over its pixels and save it again. Also really fun to play around with. I used python with open-cv for exactly that a few weeks ago.

David JONES

@neauoire (I have a Python dithering tool). Is the Go on Pinebook problem for all Go code or just this particular tool? I've been considering porting the ditherer.

Devine Lu Linvega

@drj it's just my go installation that's messed up. I was able to get a precompiled version of the tool and it works now :)

David JONES

@neauoire yay. i'm on go 1.16 because i don't like it when i upgrade and it gets messed up.

Job

@neauoire If you feel like experimenting with threshold maps, here's an 8-bit variation of interleaved gradient noise:

noise(x, y) = (142 * x + 79 * y) & 255

Should be trivial to implement in uxn, no?

The top shows a short program, to be precise a JavaScript noise function that return a number between zero and 255, based on x and y input.

It multiplies x by 142, y by 79, and returns the modulo 256 value of their sum. x and y are presumed to be integers.

The bottom shows a so-called noise map, pixels in varying shades of gray indicating a value between zero (black) and 255 (white). This maps represents which value was returned by the described noise function when the x and y coordinates of the pixels are used as input.

The distribution of dark and light pixels is fairly even, and while some hatching patterns can be spotted they are relatively subtle. This makes it a good threshold map for dithering purposes.
Devine Lu Linvega

@vanderZwan yeah that's an easy one to port :) have you tried it?

Job

@neauoire if you mean in uxn, no, because I wouldn't know how to load an arbitrary image file. If you have some pointers to how to make a CLI that can read an image file and then create a new one, this could be a neat first attempt at a uxn rom for me actually :).

If you mean trying it out for dithering in general, then yes: I have an ObservableHQ notebook that has it as one possible noise map. It also experiments with mixing it with a sharpening filter:

observablehq.com/d/8e32d923e41

@neauoire if you mean in uxn, no, because I wouldn't know how to load an arbitrary image file. If you have some pointers to how to make a CLI that can read an image file and then create a new one, this could be a neat first attempt at a uxn rom for me actually :).

If you mean trying it out for dithering in general, then yes: I have an ObservableHQ notebook that has it as one possible noise map. It also experiments with mixing it with a sharpening filter:

Devine Lu Linvega

@vanderZwan yeah, I meant in uxn, it'd be a good way to break into it, it's a pretty straight forward project to implement. There's lots of image parsing code around that you could base yourself on if you wanted to give it a try :)

Job

@neauoire I'll have a look around and maybe give it a shot!

But I'm saying this in an "explicitly *not* calling dibs on this"-manner, because I have a six month old and I know I have no spare time for creative coding for a while anyway ;)

Go Up