Accessibility
Adobe
サインイン 注文状況 ユーザー登録

Director TechNote

Lingoでイメージを加工する

Director 8.0からビットマップを加工するための強力なLingoが採用されました。それらのLingoを利用したサンプルスクリプトをご紹介します。

1 ビットマップを水平方向に反転する

以下のムービースクリプトは、ビットマップキャストメンバーを水平方向に反転させた新規のキャストメンバーを作成し、その参照を返します。たとえば、このムービースクリプトを使って、現在スプライト1に設定されているビットマップキャストメンバーを反転した新規キャストメンバーに変更するには、以下のステートメントを実行します。

sprite(1).member = xFlipMemberH(sprite(1).member)


-- [ビットマップキャストメンバーを水平方向に反転させたキャストメンバー作成]

on xFlipMemberH memberRef

  -- [1]ビットマップキャストメンバーから元となるイメージオブジェクトの参照を取得
  sourceImage = memberRef.image

  -- [2]元イメージの幅と高さを取得
  sourceWidth = sourceImage.width
  sourceHeight = sourceImage.height

  -- [3]元イメージと同サイズの新規イメージオブジェクトを作成
  newImage = image(sourceWidth, sourceHeight, memberRef.depth)

  -- [4]元イメージを新規イメージオブジェクトに水平方向逆向きにコピー
  repeat with i = 1 to sourceWidth

  -- [5]コピー先矩形を左から縦に1ピクセルずつ指定
  destinationRect = rect(i - 1, 0, i, sourceHeight)

  -- [6]コピー元矩形を右から縦に1ピクセルずつ指定
  sourceRect = rect(sourceWidth - i, 0, sourceWidth - i + 1, sourceHeight)

  -- [7]元イメージからコピー元矩形を新規イメージのコピー先矩形にコピー
  newImage.copyPixels(sourceImage, destinationRect, sourceRect)

  end repeat

  -- [8]新規ビットマップキャストメンバーを作成
  newBitmap = new(#bitmap)

  -- [9]コピー後のイメージオブジェクトを新規ビットマップキャストメンバーのイメージに設定
  newBitmap.image = newImage

  -- [10]新規ビットマップキャストメンバーの参照を返す
  return newBitmap

end


スクリプトについて、簡単に解説します。なお、スクリプト中で使用されているプロパティ・関数・キーワード・コマンド等について、詳しくはオンラインヘルプあるいは『Lingo辞書』をご参照ください。

[1]パラメータとして渡されたビットマップキャストメンバーの参照から、元となるイメージオブジェクトの参照を取得します。イメージの加工は、基本的にイメージオブジェクトを媒介として行います。そのイメージオブジェクトを参照するのが、プロパティ'image'です。以降のステートメントでは、この元イメージオブジェクトを使って処理を進めます。

[2]元となるイメージオブジェクト参照からイメージの幅と高さを取得します。

[3]'image()'関数を使って、元イメージオブジェクトと同じサイズ・色深度の新規イメージオブジェクトを作成します。新規イメージオブジェクトを作成する'image()'関数は、イメージオブジェクトを参照する'image'プロパティとは異なりますので、ご注意ください。

[4]'repeat'構文によるループ処理で、元イメージオブジェクトを縦1ピクセルずつ、新規イメージオブジェクトの水平方向反対側にコピーします。

[5]新規イメージオブジェクトへのコピー先矩形を、左から縦1ピクセルずつ指定します。矩形の左上は、値0からスタートします。したがって、最初の矩形は'rect(0,0, 1, sourceHeight)になります。

[6]元イメージオブジェクトのコピー元矩形を、右から縦1ピクセルずつ指定します。最初は、'rect(sourceWidth - 1, 0, sourceWidth, sourceHeight)'の矩形からスタートします。

[7]'copyPixels()'関数を使って、元イメージオブジェクトのコピー元矩形を、新規イメージオブジェクトのコピー先矩形(quad)にコピーします。

[8]反転コピーしたイメージオブジェクトを設定するための、新規ビットマップキャストメンバーを作成します。

[9]反転コピーした新規イメージオブジェクトを、作成したビットマップキャストメンバーに設定します。

[10]反転コピーしたイメージの設定されたビットマップキャストメンバーの参照を返します。


2 ビットマップをグレースケールに変換する

以下のムービースクリプトは、ビットマップキャストメンバーをグレースケールに変換した新規のキャストメンバーを作成し、その参照を返します。1の「ビットマップを反転する」ムービースクリプトと同様に、以下のステートメントでグレースケールに変換したビットマップキャストメンバーを参照できます。

xChangeToGray(ビットマップキャストメンバー)


-- [ビットマップキャストメンバーをグレイスケールに変換したキャストメンバー作成]

on xChangeToGray memberRef

  --[1]コピー元イメージオブジェクトの参照とサイズを取得

  sourceImage = memberRef.image
  sourceWidth = sourceImage.width
  sourceHeight = sourceImage.height

  -- 元イメージと同サイズの新規イメージオブジェクトを作成

  newImage = image(sourceWidth, sourceHeight, memberRef.depth)

  -- [2]元イメージを1ピクセルずつグレースケールに変換

  repeat with i = 0 to sourceWidth - 1
    repeat with j = 0 to sourceHeight - 1

      -- [3]元イメージの対象ピクセルのカラー値を取得
      lColor = sourceImage.getPixel(i, j)

      -- [4]取得したカラー値からグレースケール値を算出
      nGray = lColor.red * .3 + lColor.green * .59 + lColor.blue * .11

      -- [5]新規イメージの同じポイントにグレースケールのカラー値を設定

      newImage.setPixel(i, j, rgb(nGray, nGray, nGray))

    end repeat
  end repeat

  -- [6]新規ビットマップキャストメンバーにグレースケールイメージを設定して返す

  newBitmap = new(#bitmap)
  newBitmap.image = newImage
  return newBitmap
end


スクリプトについて、簡単に解説します。

[1]コピー元イメージオブジェクトの参照とそのサイズを取得したうえで、同じサイズ・色深度の新規イメージオブジェクトを作成します。これらの処理は、1の「ビットマップを水平方向に反転する」ムービースクリプトと同様です。

[2]元イメージオブジェクトの左上から1ピクセルずつカラー値を取得し、新規イメージオブジェクトの同じポイントをグレースケールに変換したカラー値に設定します。水平方向と垂直方向を1ピクセルずつ処理するために、それぞれの方向に対して2つの'repeat'構文を入れ子にしています。

[3]'getPixel()'関数を使って、対象ピクセルのカラー値を取得しています。対象となるイメージオブジェクトの左上のポイントは、'point(0, 0)'で始まります。したがって、最後の右下のポイントは、'point(sourceWidth - 1, sourceHeight -1)になります。

[4]取得したカラー値から、グレースケール値を算出します。カラー値のRGB各色要素は、'red'、'green'、'blue'で取得できます。これらをグレースケール値に変換する場合、各色要素の明るさが異なることに注意が必要です。緑100%(値255)は、青100%(値255)よりずっと明るく見えます。この変換は以下の式で計算できます。

グレー値 = 赤 * 0.3 + 緑 * 0.59 + 青 * 0.11

この式から得られた値を、全色要素に設定するとグレースケールのカラー値になります(全色要素の値が等しいときグレーになります)。

[5]'setPixel()'関数を使って、新規イメージオブジェクトの同じポイントにグレースケールのカラー値を設定します。RGBのカラー値は、'rgb()'関数で設定できます。各色要素の値は0~255の整数を指定します。

[6]グレースケールに変換したイメージオブジェクトを新規ビットマップキャストメンバーに設定して、その参照を返します。これらの処理は、1の「ビットマップを水平方向に反転する」ムービースクリプトと同様です。

ID: dr0244
Product: Director
Versions: 8〜
OS: ---
Browser: N/A
Server: N/A
Database: N/A
Former ID: N/A