VisualWorksで画像のグレイスケール処理をやってみました。今回もsumimさんにお世話になりました....
| img newImage | img := (ImageReader fromFile: '/path/to/your/image/file') image. newImage := img copyEmpty. img pixelsDo: [:x :y | | pxColor rgbAve newPxColor | pxColor := img valueAtPoint: x@y. rgbAve := (pxColor red + pxColor green + pxColor blue) / 3. newPxColor := (ColorValue red: rgbAve green: rgbAve blue: rgbAve). newImage atPoint: x@y put: (img palette indexOfPaintNearest: newPxColor). ]. img inspect. newImage inspect
これは、単純なグレイスケール処理です。RGBの平均を取っているだけです。
味噌は、indexOfPaintNearestの当たりのようです、ここでPaletteに対応する色が無いとさんざんエラーに泣かされました..