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になるのか・・・なるほど、なんかわかりそーな気がするけど、やっぱりよくわからないな。
これは保留ということで。