RGSS2を知る(23)
Bitmapクラスのbltメソッドについて。
b1 = Bitmap.new(300,300) b1.fill_rect(b1.rect, Color.new(255,0,0)) b2 = Bitmap.new(300,300) b2.fill_rect(b2.rect, Color.new(0,0,255)) b = Bitmap.new(640,480) b.blt(0, 0, b1, b1.rect) b.blt(100, 100, b2, b2.rect, 128) p b.get_pixel(200,200) # => (126,0,128,255) s = Sprite.new s.bitmap = b loop do Graphics.update end
赤に対して青をα128で重ねた。赤が126ってのは誤差だろうが、どういう計算による誤差なのかが想像できない。
とりあえず、結果のαは255ということで、重ねる側のαで減らないのは正しい。
画像のほうをα128にして重ねても結果はまったく同じだった。
b1 = Bitmap.new(300,300) b1.fill_rect(b1.rect, Color.new(255,0,0,100)) b2 = Bitmap.new(300,300) b2.fill_rect(b2.rect, Color.new(0,0,255,200)) b = Bitmap.new(640,480) b.blt(0, 0, b1, b1.rect) b.blt(100, 100, b2, b2.rect) p b.get_pixel(200,200) # => (24,0,230,221) s = Sprite.new s.bitmap = b loop do Graphics.update end
αに関しては、Ad + (255-Ad) * As / 255 = 200 + (255-200) * 100 / 255 = 221.5686となる。
RGBは・・・まずい、計算式がさっぱりわからない。
青が230となっていて、255*200/255よりも大きい数字になっているから、重ねる先の画像のαがなんらかの影響を与えているのだろうと思う。
が・・・上に乗せる色のほうが下の色の影響でαの分よりも強くなっていいのか?
あ、いや、230とα221で約200になるのか・・・なるほど、なんかわかりそーな気がするけど、やっぱりよくわからないな。
これは保留ということで。