1ドット以下のスクロール

Windows用のセル画像→AVI作成ツールには1ドット以下のスクロール処理が必要である。TOWNS用のZC.EXPにはこの機能が無かったのでイマイチだった。
  1. 基本的考え方
  2. 実装時の注意点

基本的考え方

例として、左に0.6ドット、上に0.2ドットスクロールすることを考える。
下がスクロール前後のドットの論理的な状態である。

スクリーンでの表示上は、スクロール後のA領域は、白、赤、青、緑が入り混じった中間色となる。

混ざり具合は、
白*0.4*0.8 + 赤*0.6*0.8 + 緑*0.4*0.2 + 青*0.6*0.2
であるのは図から分かる。
もっと一般的に書くと、
注目点Aの色=
もともとの色*(1-左方向への移動量)*上方向への移動量 + 
右隣の色*左方向への移動量*(1-上方向への移動量)+ 
下隣の色*(1-左方向への移動量)*(1-上方向への移動量)+ 
右下隣の色*左方向への移動量*上方向への移動量
である。
実際には、これをRGBA(Aとはαチャンネルすなわち透明度)毎に全ドット計算すればOK。
計算後の画像を透明度を使って下絵に合成すれば一丁あがり。んむ、何だ書いてみると簡単な気がするなあ。穴がありそう…。

実装時の注意点

  1. 右端と下端1ライン分をどうするか。色は元の色、濃度は画面の外なので0%とするか、あるいは元の濃度を使うか。
  2. 4つのドットの濃度の合計は1にならなくてはいけない。誤差に注意。
  3. A,B,C,Dの全ての濃度が0ならそのドット(A)は計算の必要なし。RGB毎にABCDが同じ値ならそのRGBは計算の必要なし。
  4. 10.6ドット等1ドット以上で小数点付きのスクロールは、10ドットスクロール+0.6ドットスクロールと考える。整数分のスクロール処理と小数分のスクロール処理の2段階に分けることは重要。整数分のスクロールは単なるメモリーコピーである。
  5. 今回は左上移動だけど、他にあと7方向ある。しかし、例えば右へ0.3ドットスクロール=右へ1ドットスクロール+左へ0.7ドットスクロールと考えれば処理は一本化出来る。右/下方向への移動は+、左/上方向への移動は―とする。
    1. 整数部分移動(小数部分があれば切り上げ)
    2. 小数部分移動(x,y)
      1. 右/下方向ならば、小数部分移動へのパラメータ=移動量―整数部分
      2. 左/上方向ならば、小数部分移動へのパラメータ=1―(移動量―整数部分))
  6. 濃度計算の時に同時に重ねる濃度の処理も同時に計算するといいかも(…って私以外には読んでも意味不明。ごめん。)。
  7. 4バイト(RGBA)の連続に対して同じ計算を繰り返す処理である。MMXの威力を炸裂させたいものである。
後は…実装しながら考えよう(笑)
フリーソフトウェアへ戻る
ホームページへ戻る
お手紙はnekora@mapletown.netまで☆