ある画像をじっくりながめたあと、白い画像をみたりすると
綺麗な色つきの画像が見えるようになったりするというものがテレビなどで
紹介されている事があるので、その補色処理をおこなうフィルタを書いてみました。
| dialog fileName imgReader img newImage | dialog := OpenFileDialog new. fileName := dialog select. fileName inspect. imgReader := ImageReader fromFile: fileName. img := imgReader image. newImage := img copyEmpty. img pixelsDo: [:x :y | | pxColor newPxColor | pxColor := img valueAtPoint: x@y. newPxColor := (ColorValue red: (1.0 - pxColor red) green: (1.0 - pxColor green) blue: (1.0 - pxColor blue)). newImage atPoint: x@y put: (img palette indexOfPaintNearest: newPxColor). ]. img inspect. newImage inspect.
まぁ単純に反対色を設定しているだけです。
よくよくこの経過をみると画像の各ピクセルにたいしてある処理を適応して
あたらしい画像を返却するというパターンになっているようにおもいます。
という事はImageFilterというクラスをつくっておいてそのクラスをImageに適応できるようにするのが良いのかもしれません。