基礎編(その八)

ページ名:tutorial_basis_8


画像の加工 part2


今回は、二つのパラメータをセットで用いる加工について説明します。


ノイズをかける


noise パラメータは画像にノイズをかけるパラメータですが、ノイズの種類が複数である上に、ノイズの強度を設定することも出来ます。
そこで、ノイズの種類は noise パラメータの設定値として与えた上で、noisepoint というパラメータを併用してその強度を指定する形式を取っています。
論より証拠、ひとつ実例をお目にかけましょう。


 1: [init]
 2: backwidth=632
 3: backheight=420
 4: fileName=MapOfWirth.bmp
 5: 
 6: [冒険者の宿]
 7: width=400
 8: height=260
 9: fileName=AdventurersInn.bmp
10: position=116,15
11: transparent=0
12: noise=3
13: noisepoint=127

12 行目に noise パラメータ、13 行目に noisepoint パラメータを追加しました。その値の具体的な意味は後ほど説明するとして、これを実行すると以下のように表示されます。



いわゆる砂嵐という感じのノイズが入りましたね。
noise = 3 をそのままにして、noisepoint の値(つまりノイズの強度)だけを変えたものを幾つか表示してみます。



noisepoint=31



noisepoint=63



noisepoint=127



noisepoint=255



noisepoint=511


こんな感じで noisepoint の値が大きくなるにつれてノイズが激しくなるわけです。


noise の種類と効果


一方 noise パラメータによって指定できる内容は以下の通りです。noisepoint パラメータが取りうる値の範囲とその意味も併記しておきます。


効果noisepoint 値
0ノイズなし(デフォルト値)(意味を持たない)
1画像の明るさを変化させる-255 ~ 255 の範囲で変化し、値が小さくなるほど暗く、値が大きくなるほど明るくなる。ただし -255 と 255 は画面を単色化するので実質的に意味があるのは -254 ~ 254
2すべてのピクセルを白と黒の二色に置き換える-1 ~ 255 の範囲で変化し、二値化のしきい値*1を変化させる。ただし -1 と 255 は画面を単色化するので、実質的に意味があるのは 0 ~ 254 の範囲
3白黒のノイズを発生させるマイナス値は完全なノイズ。0 はノイズなし。1 以上の値では大きくなるごとにノイズが強くなる*2
4カラーノイズを発生させる
5画面にモザイクをかける(おそらく)モザイクのタイルの大きさ(単位:ピクセル)。1 以下は元の画像のまま表示される

白黒ノイズ(noise = 3)以外のノイズについても実行例を示しておきましょう。
まずは明るさの変化です。



noise = 1, noisepoint = 127



noise = 1, noisepoint = -127


次は二値化におけるしきい値の変化です。



noise = 2, noisepoint = 63



noise = 2, noisepoint = 191


オヤジ、後ろ後ろ!
それはともかく、カラーノイズはこんな感じです。



noise = 4, noisepoint = 63



noise = 4, noisepoint = 191


最後はモザイクです。



noise = 5, noisepoint = 4



noise = 5, noisepoint = 8



noise = 5, noisepoint = 16


画像の重ね方を変える


基礎編(その五)ではセクションを重ねた際の動作について説明しましたが、paintmode パラメータを用いるとその重ね方をアレンジすることが出来ます。
このパラメータは 0 ~ 4 の範囲の値をとるのですが、 3 を指定したときのみ alpha という補助パラメータを必要とし、他の 0, 1, 2, 4 では必要としないという、少し変わった仕様になっています(そして現実問題として paintmode = 3 以外を使うことはあまりありません)。


この alpha というのはコンピュータグラフィックスにおけるα値のことで、日本語で言うなら「不透明度」とでもいうべきものです。α値の設定はだいたい 8bit 値、つまり 0 ~ 255 の範囲をとることが多く、最小の 0 の時は「不透明度最小=透明」を、最大の 255 の時は「不透明度最大=透けずに塗りつぶす」を意味します。
画像データのフォーマットによっては画素(画像の最小の点)ごとにα値を設定できるものもありますが、エフェクトブースターはそこまでの処理機能を持っておらず、画像単位(厳密にはセクションごと)でα値を設定できるのみです。


paintmode パラメータの設定値による機能の変化は、以下のようになっています。


効果alpha 値
0普通に描画して下の画像に重ねる(デフォルト値)(意味を持たない)
1下の描画と AND 結合*3を行う(意味を持たない)
2下の画像と OR 結合*4を行う(意味を持たない)
3透けた状態で下の画像に重ねる0 ~ 255 の範囲の値をとり、0 は完全に透明な状態、255 は全く透けていない状態で重ねる。それ以外の範囲の値の場合、エンジンによって挙動が異なる*5
4何も描画しない(意味を持たない)

これも、実例を見た方が早いでしょう。以下にサンプルを表示します。



paintmode = 1



paintmode = 2



paintmode = 3, alpha = 63



paintmode = 3, alpha = 127



paintmode = 3, alpha = 191


特に paintmode = 3 はフェイドイン/フェイドアウトなどの使い道があり、それなりに使用する機会もあることと思います。
1 と 2 については説明が煩瑣になるわりに使い道がないので割愛します。


画像の一部を切り取る


一種類のパラメータで二つ以上の設定値を組み合わせて指定するパラメータもあります。
既に登場している position パラメータ(画面左上からの水平距離と垂直距離を連結して指定する)がそうですが、同じような指定の仕方を行う加工用パラメータに clip というパラメータがあります。
これは fileName などで指定された画像の一部を四角く切り取って表示するためのもので、以下の四つの数値をコンマで連結して指定します(単位はすべてピクセル)*6


  • 切り取る位置の、画像左端からの水平距離(Left)
  • 切り取る位置の、画像上端からの垂直距離(Top)
  • 切り取るサイズの水平幅(Width)
  • 切り取るサイズの垂直高さ(Height)


たとえば、冒険者の宿画像の右上半分と左下半分を表示するには、以下のようにします。


 1: [init]
 2: backwidth=632
 3: backheight=420
 4: fileName=MapOfWirth.bmp
 5: 
 6: [冒険者の宿右上]
 7: width=200
 8: height=130
 9: fileName=AdventurersInn.bmp
10: clip=200,0,200,130
11: position=316,15
12: transparent=0
13: 
14: [冒険者の宿左下]
15: width=200
16: height=130
17: fileName=AdventurersInn.bmp
18: clip=0,130,200,130
19: position=116,145
20: transparent=0

10 行目と 18 行目に clip パラメータが使われていますね。どちらも Left, Top, Width, Height の順に四つの数字を連結して設定しています。
なお、それぞれの描画領域は(元の画像を切り取ったことで)縦横とも半分になっていますので width パラメータと height パラメータも修正しており(7, 8, 15, 16 行目)、それに応じて表示位置を指定する position パラメータも適宜修正しました(11 および 19 行目)。
それでは実行結果を見て見ましょう。



この例では切り取ったサイズと表示するサイズをあわせてありますが、両者が異なる場合は(切り取らない画像がそうであるように)適宜伸縮して表示されます。


演習問題


基礎編(その五)では三つのセクションをもち、それぞれ一部の領域が重なる定義ファイルを作成しました(MultiSection.jpy1)。

  • それぞれのセクションに paintmode=3 と alpha=127 の二行を付け加えるとどうなるか確認してみましょう。
  • alpha パラメータの値を適宜変更し、結果を確認しましょう。
  • paintmode = 1 や 2 の場合も確認してみましょう。

まとめとおさらい


今回のポイントは以下の通りです。


  • 画像加工に用いるパラメータの中にはセットで用いるものがある
    • 一方のパラメータは加工の種類を、他方のパラメータは加工の強度を意味する
    • 加工の強度は 0 ~ 255 か -255 ~ 255 のどちらかの範囲が多い
  • clip パラメータは四つの設定値をコンマで連結して指定する

今回登場したパラメータは以下の通りです。


パラメータ名機能
noiseノイズの種類を指定する
noisepointnoise と併用し、ノイズの強度を指定する
paintmode画像の重ね方を指定する
alphapaintmode = 3 の場合に併用し、画像のα値(不透明度)を指定する
clip画像を切り取って表示する

前回と今回は画像を加工するパラメータを紹介しました。
これで全てというわけではありませんが、パラメータの紹介はいったんここまでとし、次回はこれらを扱う上での一般的な注意点を説明し、このセクションを終えることにします。



戻る:基礎編(その七)

*1 しきい値とは判定する基準となる値のことです。この場合は、色を数値で表し、ある値より大きければ白、小さければ黒と判定しますが、その基準値をしきい値といいます
*2 editor128.chmでは 0 ~ 255 の値をとるように書かれていますが、既に例示したように 256 以上の値でも効果を発揮します。ただし 256 以上の値を指定した場合、実行するエンジンのバージョンによって結果が異なるようです
*3 おそらく厳密には bit 演算 AND
*4 おそらく厳密には bit 演算 OR
*5 CW 1.50 では alpha の下位 1 バイトだけが有効、つまり -128 と 127 と 383 は同じ結果になる。Py では 0 未満は 0 、255 以上は 255 として扱われる
*6 editor128.chm には上・左・幅・高の順で記載されていますが、正しくは左・上・幅・高の順です

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧