Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009-04-14

画像合成のナゾにせまるよ?!

| 21:53

 と言うわけで、今日は、昨日やられた画像合成の不具合について検証して行きたいと思います。

 まずは、画面とイメージの準備。

#-----------------------------------------------------------
母艦のタイトルは「画像合成のナゾ」
母艦の幅は640。母艦の高さは480。
母艦を$999999で画面クリア。

裏画面とはイメージの可視はオン。
裏画面の幅は50。
裏画面の高さは50。
裏画面のXは0
裏画面のYは0
#裏画面を$00FF00で画面クリア。
裏画面を$000000で画面クリア。

表画面とはイメージの可視はオン。
表画面の幅は400。
表画面の高さは200。
表画面のXは0
表画面のYは250
表画面を$999999で画面クリア。

マスク画像とはイメージの可視はオン。
マスク画像のXは0
マスク画像のYは50

塗り色は$FFFFFF。線色は$000001
裏画面の0,0から50,50へ
#裏画面の5,5から45,45へ
#裏画面の10,10から40,40へ四角
#-----------------------------------------------------------

 の下にこれをくっつけて実行。

#-----------------------------------------------------------
# 画像合成による不具合
#-----------------------------------------------------------

数を0から3まで繰り返す
  裏画面を表画面の0,50*数へ画像合成。

  数で条件分岐
    0ならば
      番号色=$BB0000
    1ならば
      番号色=$0000AA
    2ならば
      番号色=$EE8800
    3ならば
      番号色=$00AA00

#  表画面の25,25+50*数を番号色で線色まで塗る。
  表画面の25,25+50*数を番号色で塗る。
#  文字サイズは24。文字色白色。
#  表画面の15,10+50*数へ数+1を文字描画。

#---画像合成による不具合(ここまで)--------------------------

 なんで、○の中の白いところだけ塗ったはずなのに、しかも塗った後に合成したはずの次の○のフチが塗られていますかっ?!

 次に、下の二行のコメントを外す。

 昨日の現象が再現です。

 文字を描画しただけなのに、度はが透過されてフチが黒くなっちゃうって、どういう現象ですか?!

 画像の処理に詳しくないから、理解できん(--;



 このようにすると、あっさり解決。

 こないだの、黒以外では透過できないいう問題とは明らかに異なる怪現象に思われます。

#-----------------------------------------------------------
# キャラ合成-正統による避
#-----------------------------------------------------------

マスク画像の画像は「裏画面」
マスク画像を$000000で画像マスク作成
#マスク画像を$00FF00で画像マスク作成

#---透過色を黒以外にしたい場合は以下の3行が必要---
#マスク画像を画像ネガポジ
#マスク画像を裏画面の0,0へ画像ANDコピー
#マスク画像を画像ネガポジ

数を0から3まで繰り返す
  マスク画像を表画面の0,50*数へ画像ANDコピー。
  裏画面を表画面の0,50*数へ画像ORコピー。

  数で条件分岐
    0ならば
      番号色=$BB0000
    1ならば
      番号色=$0000AA
    2ならば
      番号色=$EE8800
    3ならば
      番号色=$00AA00

#  表画面の25,25+50*数を番号色で線色まで塗る。
  表画面の25,25+50*数を番号色で塗る。
  文字サイズは24。文字色白色。
  表画面の15,10+50*数へ数+1を文字描画。

#--キャラ合成-正統による避(ここまで)----------------------

 さらに、もっとナゾなことも発見。

 こうしたら、大丈夫だったのです。

#-----------------------------------------------------------
# 繰り返さないことで避できる?!
#-----------------------------------------------------------

裏画面を表画面の0,50*0へ画像合成。
裏画面を表画面の0,50*1へ画像合成。
裏画面を表画面の0,50*2へ画像合成。
裏画面を表画面の0,50*3へ画像合成。
表画面の25,25+50*0を線色まで$BB0000で塗る。
表画面の25,25+50*1を線色まで$0000AAで塗る。
表画面の25,25+50*2を線色まで$EE8800で塗る。
表画面の25,25+50*3を線色まで$00AA00で塗る。

#-----------------------------------------------------------

 しかし、よく考えたら、繰り返しの順番はこうだったはず。

 やっぱ、発生する~;

#-----------------------------------------------------------
# この順番だと発生するらしい。
#-----------------------------------------------------------

裏画面を表画面の0,50*0へ画像合成。
表画面の25,25+50*0を線色まで$BB0000で塗る。
裏画面を表画面の0,50*1へ画像合成。
表画面の25,25+50*1を線色まで$0000AAで塗る。
裏画面を表画面の0,50*2へ画像合成。
表画面の25,25+50*2を線色まで$EE8800で塗る。
裏画面を表画面の0,50*3へ画像合成。
表画面の25,25+50*3を線色まで$00AA00で塗る。

#-----------------------------------------------------------

 つまり、画像合成の繰り返しと、塗る繰り返しを分ければ、避できるみたいです。

 て、意味わかんないよ!

 とりあえず、塗るの後に画像合成が行われると、バグるってことなのかな?


 結局、ナゾは解明できてませんが、バグ報告だけはしてみましょう。

ゲスト



トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20090414