f8g

濃度変換2

http://d.hatena.ne.jp/arikui/20070918/1190050541
変換する関数に送るのを、色単位じゃなくピクセル単位で送るともっと自由に出来る。(グラフ書くのは難しいけど)

pixel = pictures[0].image.getPixel(x, y)
pictures[1].image.setPixel(x, y, f(pixel))

たとえばこんなの。

def f(pxl)
	pr = 1 * pxl.r
	pg = 1 * pxl.g
	pb = 1 * pxl.b

	_r = (pr > 128)?
	      (pr > 192)? 255 : 192:
	      (pr > 64)?   64 :   0
	_g = (pg > 128)?
	      (pg > 192)? 255 : 192:
	      (pg > 64)?   64 :   0
	_b = (pb > 128)?
	      (pb > 192)? 255 : 192:
	      (pb > 64)?   64 :   0

	min = (pr < pg)?
	        (pr < pb)? pr : pb:
	        (pg < pb)? pg : pb

	r = (pr == min)? _r : pr
	g = (pg == min)? _g : pg
	b = (pb == min)? _b : pb

	Drawing::Color::fromArgb(r, g, b)
end

Rubyのメソッド使うと遅かったので、ちょっと汚いけどループの中で使うにはこうした方が速いみたい。


単純な処理だけど、色々弄れるから楽しい。
Tumblrも画像集めるだけじゃなくて、一度なんかのフィルタ通してからアップロードしたほうが楽しいかもしれない。