ビットマップ値

> ビットマップ値

Bitmap クラスは、3ds Max ビットマップの保存および 3ds Max ビットマップへの下位レベルのアクセスを提供します。

ビットマップは、メモリ上にのみ存在する一時的なオブジェクトにしたり、ディスク上のファイルに関連付けたりすることができます。

ファイルに関連付けられたこれらのビットマップは、Null 以外の .fileName プロパティを含み、ロード専用または保存専用のいずれかであり、両方を兼ね備えることはありません(これはファイル I/O における場合であり、メモリ中のすべてのビットマップでは、setPixel() 関数を使ってピクセルを修正できます)。

ロード専用ビットマップは、openBitmap() および selectBitmap() 関数を使用して作成します。

一時的なビットマップまたは保存専用ビットマップは、bitmap() コンストラクタか、render()copy()、または getChannelAsMask() 関数を使用して作成できます。ビットマップを保存可能にするには、コンストラクタまたは fileName: パラメータに有効なファイル名を指定するか、.fileName プロパティを設定します。

コンストラクタ:

bitmap <width <height> [filename:<filename_string>] \
[numframes:<integer>] \
[color:<color>] \
[gamma:<float>] \
[pixelAspect:<float>] \
[channels:<channel_name array>]\
[hdr:<boolean>] \
[iconName:<filename>]\
[iconSize:<point2>]

空のビットマップを作成します。返されるビットマップ値は保存可能なビットマップです。

filename: パラメータでは、save メソッドを使用してビットマップを保存するファイルの名前を設定できます。既存のビットマップ ファイル名を指定すると、ビットマップ ファイルの内容はビットマップ値に読み込まれません。

numframes: パラメータにより、マルチフレーム ビットマップを作成できます。

color: パラメータにより、ビットマップ内の全ピクセルに初期カラーを設定できます。

例:

    b = bitmap 320 240 color:white

gamma: パラメータにより、新規に作成したビットマップにガンマを設定できます。

例:

    b = bitmap 320 240 gamma:1.9
    render camera:c to:b

pixelAspect: パラメータにより、新規に作成したビットマップにピクセル アスペクトを設定できます。

注:

いったん作成されたビットマップのガンマ アスペクトやピクセル アスペクトは変更できません。ただし、ビットマップを別のガンマ アスペクトまたはピクセル アスペクトが設定されている新規作成のビットマップにコピーして、同様の効果を得ることができます。

channels: パラメータにより、作成するチャネルを指定します。これはプロパティとしても使用できます。有効な名前の一覧は、getChannel メソッドのマニュアルを参照してください。

3ds Max 8 で導入されたオプションの hdr: パラメータが true に設定されていると、コンストラクタはチャネルあたり 8 ビットではなく、32 ビットのビットマップ値を作成します。

iconName: パラメータを使用すると、ロードするアイコン ファイルを指定できます。iconSize: パラメータはアイコンのサイズを 100% DPI スケールで指定します。

openBitMap <filename_string>

指定されたビットマップ ファイルの内容を含むビットマップ値を返します。返されるビットマップ値は、ロード専用ビットマップです。

3ds Max 9 以前では、指定されたビットマップ ファイルが存在しない場合は、ランタイム エラーが生成されていました。

3ds Max 2008 以降では、指定されたビットマップが存在しない場合、値 undefined が戻されます。

selectBitMap [caption:<open_dialog_title_string>]

このメソッドは、ユーザがビットマップ ファイルを選択できるようにイメージ入力選択ブラウザを表示します。選択されたビットマップ ファイルの内容を含むビットマップ値、あるいは undefined 値(ユーザがブラウザ内で[キャンセル] (Cancel)ボタンを押した場合)を返します。返されるビットマップ値は、ロード専用ビットマップです。

<bitmap>copy <bitmap>

既存のビットマップをコピーし、ビットマップの一意なインスタンスを作成します。

ソース ビットマップがロード専用の場合、返されるビットマップ値は、ファイル名が Null でフレームが 1 つしかない一時的なビットマップ値です。

コピーするビットマップがマルチ フレーム ファイルの場合、フレーム 0 に現在のフレームの新しいコピーを作成します。

プロパティ

<bitmap>.filename : String

ビットマップに関連付けられたファイル名を取得または設定します。

<bitmap>.palette : Array

256 色の配列を生成します(現在の 3ds Max SDK 内にバグがあるため、256 エントリ以外のパレット ファイルでは作業を行うことができません)。以下に述べる getIndexedPixels() 関数で取得されたカラー インデックスでこの配列にアクセスする際には注意してください。その理由はこのインデックスは、基数が 0 で、MAXScript 配列インデックスは基数が 1 であるからです。ビットマップがパレットされていなければ、undefined を生成します。 現在、MAXScript では、パレット ビットマップを作成できません。ただし、既存のパレット ビットマップに対しては読み込みや書き込みができます。

<bitmap>.frame : Integer

マルチ フレーム ファイルでの現在のフレーム番号を取得および設定します。このプロパティは、ロード専用ビットマップでのみ設定できます。.avi および .mov などの固有のマルチ フレーム ファイルにおけるフレーム番号の基数は 0 です。

<bitmap>.numframes : Integer

マルチ フレーム ファイル内のフレーム数。単一のイメージファイルには 1 を生成します。

<bitmap>.height : Integer, read-only

ビットマップの高さをピクセル数で返します。

<bitmap>.width : Integer, read-only

ビットマップの幅をピクセル数で返します。

<bitmap>.gamma : Float

ビットマップのガンマ値を取得および設定します。

<bitmap>.inputGamma : {#auto | #default | Float}

ビットマップの入力ガンマ モードを返します。

この値は、ビットマップ値がイメージ ファイルからロードされた時に設定されたガンマ モードを反映します。

詳細については、「ビットマップ ガンマおよび MAXScript」を参照してください。

3ds Max 2014 以降で使用可能です。

<bitmap>.inputGammaValue : Float

ビット マップの実際の入力ガンマ値を返します。

詳細については、「ビットマップ ガンマおよび MAXScript」を参照してください。

3ds Max 2014 以降で使用可能です。

<bitmap>.aspect : Float, read-only

ビットマップのピクセル アスペクトを返します。この値は、ピクセルに対するアスペクトであって、ピットマップ イメージに対するアスペクトではありません。

<bitmap>.channels : Array

このプロパティにより、ビットマップ内で使用可能なビットマップ チャネルを取得および設定します。有効な名前の一覧は、getChannel メソッドのマニュアルを参照してください。

    b = bitmap 100 100 channels:#(#weight)
    --> BitMap:
    b.channels
    --> #(#weight)
    b.channels = #(#zDepth)
    --> #(#zDepth)
<bitmap>.hasAlpha : Boolean, read-only

このプロパティには、ビットマップにアルファ チャネルがある場合に true、アルファ チャネルがない場合に false が含まれます。

メソッド

display <bitmap> caption:<string>

イメージを表示している仮想フレームバッファ(VFB)を開きます。

ビットマップへの変更は、VFB の表示には自動的に反映されません。

VFB を更新するには、この関数を再度呼び出す必要があります。

ビットマップ値の frame プロパティを設定すると、VFB が更新されます。

各ビットマップはそれぞれ VFB を持ちます(2 つの異なるビットマップを表示すると、2 つの VFB が表示されます)。

3ds Max 2015 以降は、オプション キーワード引数 caption: が文字列として指定されている場合、これが VFB のタイトル バーのキャプションとして表示されます。

unDisplay <bitmap>

ビットマップに関連付けられている VFB が開いている場合は、それを閉じます。

<boolean>save <bitmap> [frame:<integer>] [gamma:{#auto|#default|<float>}] [quiet:<boolean>]

ビットマップの現在の状態を保存します。ファイル名が最初に設定されていることを確認します。

マルチ フレーム イメージ ファイルを保存するとき、frame: キーワード パラメータの効果は出力ファイルのタイプによって異なります。

.avi および .mov などの固有のマルチ フレーム ファイルは、frame: パラメータを無視し、常に save() ごとに次の出力ファイル フレームに順に書き込みます。ランダムにフレームに書き込んだり、保存済みのフレームに再度書き込むことはできません。

イメージのシーケンス(.bmp、.jpg、.tga など)の保存には frame: パラメータを指定し、保存される各フレームの出力ファイル名にフレーム番号が追加されるようにする必要があります。これにより、IFL の構築に適したイメージ ファイル シーケンスが生成されます。

出力ファイルは、ビットマップ上で close が呼び出されるまで開いたままの状態になります。

save() 関数は、保存可能なビットマップ上でのみ呼び出すことができます。 openBitmap() または selectBitmap() を使用して開いたビットマップを保存しようとすると、ランタイム エラーが生成されます。

3ds Max 2014 以降では、gamma: キーワード パラメータを使用してガンマ モードまたはガンマ上書きの値を設定することができます。

3ds Max 8 においてこのメソッドに追加された quiet: オプションの詳細は、抑制モードを参照してください。

3ds Max 8 以降 では、このメソッドは、正常に終了した場合に True、保存がエラーになった場合(既存の読み込み専用ファイルを上書きしようとした場合など)に False を返します。

close <bitmap>

ビットマップに関連付けられたビットマップ ファイルが出力用に開かれている場合、このファイルを閉じます。ビットマップ値に対して save をはじめて呼び出すと、出力用のビットマップ ファイルが開きます。ビットマップに関連付けられた仮想フレーム バッファ(レンダリング フレーム ウィンドウ)が開かれている場合は、それを閉じます。この関数は、内部的なピクセル フレーム バッファやビットマップに割り当てられていたすべてのメモリを解放します。たとえば、レンダリング ループなどでたくさんのビットマップを生成する場合、close() 関数を使用して大量のメモリを解放します。そうしないと、次のガベージ コレクションまでメモリが解放されません。

free <bitmap>

ガベージ コレクションを待たずに、ビットマップ値によって使用されているメモリを解放します。

3ds Max 9 以降 で使用可能です。

copy <source_bitmap> <dest_bitmap>

ソース ビットマップをコピー先ビットマップにコピーします。2 つのビットマップのサイズが異なる場合は、イメージはコピー先のビットマップのサイズに合わせて調整されます。

gotoFrame <bitmap> <frame>

マルチ フレーム ファイル(avi、flc など)をフレーム frame に配置します。このメソッドはロード専用ビットマップでのみ使用できます。.avi および .mov などの固有のマルチ フレーム ファイルにおけるフレーム番号の基数は 0 です。VFB が開いている場合はそれを更新します。

getPixels <bitmap> <coord_point2> <num_pixels> linear:<boolean>

カラー値の配列としてビットマップ内の行からピクセルのシーケンスを検索します。

coord_point2 引数は一番上の左のピクセルが [0,0] の状態にある開始ピクセル座標を指定します。

Point2 座標の .x コンポーネントは列、.y コンポーネントは行です。

シーケンスは 1 行のみから派生する必要があります。複数の行にまたがるピクセルのシーケンスは取得できません。

境界外の座標を使用したり、行の境界を越えて検索すると、失敗して空の配列が生じることになります。

3ds Max 2014 に導入されたオプションの linear: キーワード パラメータを True に設定すると、ガンマ値が 1.0 の線形値にアクセスでき、False に設定すると未加工のデータにアクセスすることができます(既定値、3ds Max 2014 より前の古い動作)。

setPixels <bitmap> <coord_point2> <color_value_array>

与えられた配列内の値に対して Point2 の座標から始まるビットマップ内の 1 行に、ピクセルのシーケンスを設定します。Point2 座標の .x コンポーネントは列、.y コンポーネントは行です。設定するピクセル数は配列のサイズで決まります。getPixels() のように、行の境界を越えてピクセル シーケンスを設定することはできません。

getIndexedPixels <bitmap> <coord_point2> <num_pixels>

パレット インデックス番号の配列としてピクセルの行を検索します。coord_point2 引数は一番上の左のピクセルが 0,0 の状態にある開始ピクセル座標を指定します。インデックス番号は 0 が原点です。

注:

これは MAXScript の規約ではなく、インデックス付きのカラー規約に準拠していることに注意してください。この番号を使用して取得されたパレット配列にアクセスする際には注意してください。取得されたパレットは MAXScript 配列として返され、この配列は基数が 1 のインデックスを使用するからです。行の境界を越えるピクセル シーケンスは取得できません。

setIndexedPixels <bitmap> <coord_point2> <number_array>

所定の配列内のカラー インデックスに対して Point2 の座標から始まるピクセルの行を設定します。設定するピクセル数は配列のサイズで決まります。カラー インデックスは、基数 0 です。行の境界を越えるピクセル シーケンスは設定できません。

getChannel <bitmap> <coord_point2> <chan_name>

2D 座標で指定されたピクセルに対応する名前のチャネルに関する G-バッファ チャネルのデータを取得します。chan_name 引数は、チャネル識別子を指定する次の値の中から選択されます。

#zDepth
#matID
#objectID
#UVCoords
#normal
#unClamped
#coverage
#node
#mask
#shaderColor
#shaderTransparency
#velocity
#weight

ビットマップが要求されたチャネルを含む場合は、返される値は必ず値の配列となり、各値はそのピクセルのチャネルで前から後ろへ順に表示されるレイヤに対応しています。ビットマップが要求されたチャネルを含まない場合は、undefined 値を返します。 通常は、.rla ファイルを開くか、MAXScript の render() 関数を指定の channels: パラメータとともに使用して、チャネルを含むビットマップを取得します。前面のオブジェクトに透明度が設定されている場合は、配列内の複数の値が取得されます。

    getChannel bm [x,y] #zDepth

これは、次の値を返します。

    #(-354.413, -354.467, -355.271, -1e+030)

これは、-354.413、-354.467、および -355.271 の各深度で前面のサーフェスに 0 以外の透明度が設定されていることを示しています。-1e+30 の値は、バックグラウンド イメージの平面を表しています。

#node チャネルが生成されている場合は、そのチャネルを取得し、これらの深度の実際のシーン オブジェクトを取得できます。

    getChannel bm [x,y] #node

これは、次の値を返します。

    #($Sphere:Sphere02 @ [-4.7,24.3,0.0], $Sphere:Sphere02 @ [-4.7,24.3,0.0],$Sphere:Sphere01 @ [-8.3,56.2,5.7])

配列で返される値の型は、次のようにチャネルの種類に応じて異なります。

#zDepth: <float>
#matID: <integer>
#objectID: <integer>
#UVCoords: <point2>
#normal: <point3>
#unClamped: <color>
#coverage: <float>
#node: <node>
#shaderColor: <color>
#shaderTransparency: <color>
#velocity: <point2>
#weight: <color>

G-バッファ チャネルに格納されるデータの詳細は、3ds Max Software Development Kit のヘルプを参照してください。

getChannelAsMask<bitmap> <chan_name> [to:<bitmap>] \
[fileName:"filename_string"] [pixelAspect:<float>] \
[gamma:<float>] [layer:<integer>] [invert:<boolean>] \
[node:<node> |objectID:<integer> |matID:<integer>] \
[velocity:#angle | #magnitude] | [angle:<float>]

個別の 8 ビットのグレースケールのビットマップを構築して返します。このビットマップは、マテリアル、マップ、効果などのマスクの使用に適しています。このビットマップは、G-バッファ チャネルを選択して表示したときのビジュアル フレーム バッファの内容とほぼ同じです。また、このマスク自体にマスクを適用し、ノード、オブジェクト ID、またはマテリアル ID を選択することもできます。パラメータは次のとおりです。

<bitmap>

ソース ビットマップには、ソース G-バッファ チャネルのデータが含まれています。

<chan_name>

マスクの生成元のチャネルです。chan_name の値は、getChannel() メソッドに関して説明されている通りです。

注:

チャネルの値が複雑な場合でも、マスクは単一の 8 ビット値です。いずれの場合も、8 ビットへのマッピングが実行されます。

特に注釈がない限り、このマッピングは 3ds Max が仮想フレーム バッファでモノクロ イメージを作成するときに使用するマッピングと同じです。

to:<bitmap>

マスクを書き込むための既存のビットマップを指定します。ビットマップの幅と高さはソース ビットマップと一致している必要があります。

fileName:"filename_string"

作成されるビットマップと関連付けられたファイル名を指定します。

gamma:<float>

作成されるビットマップのガンマ値を指定します。

pixelAspect:<float>

作成されるビットマップのピクセル アスペクトを指定します。この値は、ピクセルに対するアスペクトであって、ピットマップ イメージに対するアスペクトではありません。

layer: <integer>

データを抽出するソース ビットマップのチャネル レイヤを指定します。既定値は 1 です。

invert:<boolean>

true の場合は、生成されたビットマップが反転します。規定値は、 false .

node:<node> objectID:<integer> matID:<integer>

サブマスクを指定します。これらのパラメータのいずれかを指定すると、作成されるマスクは与えられた node、objectID、または materialID を表示するピクセルのデータのみを保持するようにクリップされます。このサブマスクを使用するには、#node#objectID#matID の各チャネルがソース ビットマップに存在することを確認する必要があります。また、#coverage チャネルがソース ビットマップに表示されている場合は、サブマスクは適用範囲のデータによってアンチエイリアシングされます。

velocity:#angle | #magnitude angle:<float>

これらのパラメータは、選択されたチャネルが #velocity の場合のみ指定できます。既定の velocity パラメータ値は #magnitude です。これらのパラメータは次のように作成するビットマップをコントロールします。

velocity:#angle

作成するビットマップ ピクセル値は、ピクセルの移動方向の角度に対して同じ比率になります。角度が 0 度(直角に対して水平)のマッピングでは輝度の値は 0 になり、180 度のマッピングでは輝度の値は 127 になり、360 度のマッピングでは輝度の値は 255 となります。

velocity:#magnitude

作成するビットマップ値は速度に比例します。速度が高いと、低い場合より暗くなります。

angle:<float>

作成するビットマップ ピクセル値は、与えられた角度からのピクセルの移動方向の傾きに比例します。指定の角度では輝度の値が 255 になり、その角度から 10 度のところで輝度の値が 0 になります。指定の角度は、直角に対して水平となる 0 が基準となっています。

CompareBitmaps {<filename>File1 | <bitmap>bitmap1} {<filename>File2 | <bitmap>bitmap2}\
<int>tolerance(# different pixels) <int>variation(0-255)\
useAlpha:<boolean>errorMsg:<&string>

3ds Max 9 以降では、ビットマップの比較結果が同じ場合は true、異なる場合は false を返します。

「許容値」を超えるピクセル数が異なると、比較が失敗します。

各コンポーネントの差異が「変動」の値と同じであるか、それよりも少ない場合には 2 つのピクセルは同じとみなされます。

useAlpha が true の場合、アルファ コンポーネントの値もテストされます。false (既定値)の場合には、アルファ コンポーネントはテストされません。

指定されている場合、errorMsg キーワード変数(参照として渡される)には、エラーメッセージが含まれます。

メッセージは以下のいずれかです。

pasteBitmap <src_bitmap> <dest_bitmap> (<src_box2> | <src_point2>) <dest_point2> \
[maskColor:<color>type:{#paste|#composite|#blend|#function}] \
[function:<composite_fn>] [alphaMultiplier:<float>]

ソース ビットマップから目的のビットマップへピクセル ブロックをコピーします。

3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

    bm1=bitmap 100 100 color:red
    bm2=bitmap 100 100 color:green
    bm3=bitmap 100 100 color:blue
    pasteBitmap bm2 bm1 (box2 0 0 25 50) [50,50]
    display bm1
    pasteBitmap bm1 bm3 [25,25] [25,50] maskColor:green
    display bm3

結果

カスタム合成の例

    resetMaxFile #noPrompt--start a new scene
    --Create a teapot and two slightly offset target cameras
    theTeapot = teapot wirecolor:white segs:10
    theTarget1 = targetObject pos:[-1,0,10]
    theCamera1 = TargetCamera pos:[-10,-130,30] target:theTarget1
    theTarget2 = targetObject pos:[1,0,10]
    theCamera2 = TargetCamera pos:[10,-130,30] target:theTarget2

    --Create two bitmaps to render and process
    b1 = bitmap 320 240
    b2 = bitmap 320 240
    --Render the two cameras into the two bitmaps
    render camera:theCamera1 to:b1 vfb:off
    render camera:theCamera2 to:b2 vfb:off

    --This is the custom compositing function:
    fn compfn c1 p1 c2 p2 =
    (
    res = c2--the result will contain the G and B of b2
    res.r = c1.r--but the R from b1
    res--then we return the resulting color value
    )

    --Perform the compositing using the above function:
    pastebitmap b1 b2 [0,0] [0,0] type:#function function:compfn
    display b2

このメソッドは、カスタム関数の複雑さによりますが、一般的に MAXScript ループの getPixels/SetPixels を使用するよりも 3 ~ 5 倍速く実行されます。

このメソッドを使用して単一のビットマップを変更する例については、「MAXScript に関する質問と回答」の「ライン全体を取得できる場合は単一ピクセルを取得しない」トピックにある 3 番目の例を参照してください。

getBitmapInfo {<filename> | <bitmap>}

指定されたビットマップ ファイルの情報を 13 要素の配列として返します。3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

配列の要素は以下のとおりです。

1. 拡張ビットマップ ファイル名(String)

2. デバイス名(String)

3. ビットマップの幅(Integer)

4. ビットマップの高さ(Integer)

5. 各 RGB 要素値のビット数(Integer)

6. アルファ要素の数(Integer)

7. ビットマップのアスペクト比(Float)

8. ビットマップのガンマ(Float)

9. ビットマップにアルファが含まれているかどうか(Boolean)

10. 最初のフレーム(Integer)

11. 最後のフレーム(Integer)

12. ビットマップの種類(BitmapInfo::Type() より、Integer) ビットマップの種類について詳しくは、SDK ヘルプ ファイルの「Bitmap Types」のトピックを参照してください。

13. ビットマップ フラグ(BitmapInfo::Flags() より、Integer) 各ビットの意味について詳しくは、SDK ヘルプ ファイルの「Bitmap Flags」のトピックを参照してください。

例:

    print (getBitmapInfo (getDir #maxroot +"\\maps\\OAKLEAF.TGA"))

結果:

    "C:\Program Files\Autodesk\3ds Max 2015\maps\OAKLEAF.TGA"
    "Targa Image File"
    152
    256
    8
    8
    1.0
    2.2
    false
    0
    0
    3
    0
    OK
forceReloadBitmapFile <bitmap>

指定されたビットマップに関連付けられているビットマップ ファイルの再ロードを強制します。

3ds Max 2015 以降で使用可能です。

<boolean>registerFileChangedFunction <bitmap> <callback_functions>

1 番目の引数で指定されたビットマップのファイル変更コールバック関数を登録します。

2 番目の引数は、1 つの引数が必要な MAXScript の関数である必要があります。

成功した場合は True を、失敗した場合は False を返します。

3ds Max 2015 以降で使用可能です。

例:

    b = bitmap 100 100 --Create a new bitmap value
    b.filename = @"c:\temp\testme.bmp" --Give it a file name
    save b --Save it to file

    --Now open the file for reading
    b1 = openbitmap @"c:\temp\testme.bmp"

    --Define and register a callback function to monitor bitmap file changes
    fn onFileChanged arg = format "Bitmap Value File Modified: %\n" arg
    registerFileChangedFunction b1 onFileChanged

    setPixels b [50,50] #(red) --Write a pixel into the original bitmap value...
    save b --...and save it to disk
    --The change to the file on disk will trigger the callback function!
    --> Bitmap Value File Modified: BitMap:c:\temp\testme.bmp

関連するメソッド:

<boolean>setSilentMode <boolean>

サイレント モード(ユーザによる確認がない)をオンまたはオフにします。サイレント モードがオフの場合、ビットマップ入力中あるいは出力中にエラーが発生すると、3ds Max ビットマップ入出力ルーチンによりエラー メッセージが表示されます。サイレント モードがオンの場合、エラー メッセージは表示されません。このメソッドは、サイレント モードの前の状態を表すブール値を返します。

サイレント モードの状態は内部 3ds Max 状態を表します。他の 3ds Max プラグインではこの状態をオンあるいはオフに変更できます。このメソッドを使用する場合は、状態をオンあるいはオフにして戻り値を保存し、ビットマップ入力あるいは出力を実行してから、状態を元の値に戻すことをお勧めします。

silentMode()

サイレント モードの状態を表すブール値を返します。

selectSaveBitMap [caption:<open_dialog_title_string> ] [gamma:&gama_value] [metadata:&dataArray]

[3ds Max ビットマップ保存](3ds Max bitmap save)ダイアログ ボックスを表示して、ファイルの絶対パス名を文字列として返します。

ビットマップを保存するダイアログ ボックスをユーザがキャンセルした場合は、undefined を返します。

3ds Max 2014 以降で、オプションの gamma: キーワードを指定すると、パラメータとして渡された参照変数は、#auto#default あるいは浮動小数点のガンマ上書き値のいずれかのガンマ モード値に設定されます。

3ds Max 2014 以降で、オプションの metadata: キーワードを指定すると、パラメータとして渡された参照変数は BitmapInfo に設定されます。これは save() 関数のオプションのキーワード metadata: に渡すことのできる値の配列として表現されます。詳細については、「ビットマップ ガンマおよび MAXScript」を参照してください。

例:

    bitmap.filename = SelectSaveBitmap caption:"Select a file" gamma:&gma metadata:&data
    if (bitmap.filename) do save bitmap gamma:gma metadata:data
freeSceneBitmaps()

画像ファイルのビットマップ キャッシュが使用しているメモリをすべて解放します。これは、メモリがさまざまなビットマップでフラグメント化されており、現在アクティブなものだけを再ロードしたい場合に便利です。

getBitmapOpenFileName [caption:<title>] [filename:<seed_filename_string>]  [metadata:&dataArray]

getBitmapSaveFileName [caption:<title>] [filename:<seed_filename_string>] [metadata:&dataArray]

ビットマップ ファイル選択ダイアログ ボックスを表示します。

どちらの関数もファイルの絶対パス名を返すか、ユーザがキャンセルした場合には、undefined を返します。

getBitmapSaveFileName() 関数を使用して、既存のファイル名を選択した場合、[このフォルダには既にファイルが存在します/ファイル上書きの確認] (File Exists/Confirm Overwrite)ダイアログ ボックスが表示されます。

3ds Max 2014 以降で、オプションの metadata: キーワードを指定すると、パラメータとして渡された参照変数は BitmapInfo に設定されます。これは save() 関数のオプションのキーワード metadata: に渡すことのできる値の配列として表現されます。詳細については、「ビットマップ ガンマおよび MAXScript」を参照してください。

注:

getBitmapOpenFileName() 関数では、既存のファイル名を選択する必要はありません。存在しないファイル名を入力すると、ファイル名が返されます。必要に応じて、返されるファイル名をチェックして、そのファイルが存在するかどうかを確認してください。

ビットマップ ファイルを開くと、フレーム全体がメモリにロードされます。ビットマップの処理が終了したら、ビットマップ上で close() を呼び出すか、undefined 値をビットマップ値を格納する変数に割り当てて、ガベージ コレクション(gc light:true)を手動で実行してメモリを解放することをお勧めします。render() または getChannelAsMask() 関数を繰り返し使用する場合にメモリの消費を抑える別の方法は、to:<bitmap> キーワード引数を使用することです。この引数により、関数は新しいレンダリングまたはマスクを持つ既存のビットマップのピクセル イメージを上書きできます。

現在、ビットマップ出力のプラグインのうち、特定のものに関連付けられているプロパティへはアクセスできません。すなわち、.avi ファイルに使用されているコーデックは設定できないことになります。プロパティには、3ds Max で該当するファイル形式を保存する際に最後に使われたプロパティが使用されます。

次のスクリプトは、マルチ フレーム イメージ ファイルの正しい作成方法、および AVI ファイルとしての保存方法を示します。

スクリプト:

    theTeapot=teapot()--something to render
    animate on at time 10 \--set animate and time context
    rotate theTeapot 180 z_axis--rotate the teapot
    cam=targetcamera pos:[200,0,100] \--camera pointed at teapot
    target:theTeapot
    renderFrames=#{1,3,5..12}-- specify frames to render
    b=bitmap 160 120 filename:@"c:\temp\testme.bmp"--create a new bitmap
    for i= 1 to renderFrames.count do--loop though renderFrames
    (
    if renderFrames[i] then--if supposed to render frame...
    (
    at time i--set time context
    render 160 120 camera:cam to:b-- render to bitmap frame
    save b frame:i-- save each frame as you advance
    )-- if you save AFTER the loop,
    -- just the last frame is saved.
    )
    close b-- close the output file - this will also get rid of
    --the reference to the bitmap value and free its memory.

出力:

    $Teapot:Teapot004 @ [0.000000,0.000000,0.000000]-- result of line 1
    OK-- result of lines 2 and 3
    $Target_Camera:Camera005 @ [200.000000,0.000000,100.000000]-- result of lines 4 and 5
    #{1, 3, 5..12}-- result of line 6
    BitMap:c:\temp\testme.bmp-- result of line 7
    OK-- result of for loop, lines 8 to 15
    OK-- result of line 16
注:

save() メソッドの frame:i キーワード引数は、AVI ファイルでは(各フレーム後に自動的に進むため)オプションですが、Quicktime MOV ファイルを正しく保存するためには必須です。指定されない場合、レンダリングされた各フレームはファイル内の先頭フレームを上書きすることになり、最終的に MOV の長さは 1 フレームだけになります。

次のスクリプトでは、ビットマップ ファイルを読み込み、同じビットマップを再作成する関数を実装しているリスナーにスクリプトを出力します。その処理の後、この関数をスクリプト内にコピーできます。この機能は、スクリプトとともにビットマップ ファイルを配布する必要がないように、MAXScript でボタン イメージを作成する際に便利です。

スクリプト:

    (
    b=selectbitmap()-- open image file browser
    bname="bitmap_"+(getfilenamefile b.filename)-- build name from filename
    w=b.width-- get properties of bitmap
    h=b.height
    format "----------\nfn load_% = (\n" bname -- start defining function
    format "local %=bitmap % %\n" bname w h -- create bitmap in function
    -- write out a function that unpacks an integer into a pixel color
    format "fn unpack val = for p in val collect (r=p/256^2; g=p/256-r*256; b=mod p 256; color r g b)\n"
    for r = 0 to h-1 do-- for each row in the bitmap
    -- have function write the column of pixels to the bitmap
    ( format "setpixels % [0,%] (unpack #("bname r
    pixels=getpixels b [0,r] w-- read in the column of pixels
    for c = 1 to w do-- loop through each pixel
    ( p = pixels[c]-- get the pixel
    -- pack the pixel into an integer and write it out
    format "%" (((p.r as integer)*256+(p.g as integer))*256+(p.b as integer))
    if c != w then-- if not at end of data
    format ", "-- write a comma
    else
    format "))\n"-- else close out the line
    )
    )
    format "return %\n" bname-- function returns the bitmap
    format ")\n----------\n"-- finish off function definition
    )

出力:

    ----------
    fn load_bitmap_convert = (
    local bitmap_convert=bitmap 4 4
    fn unpack val = for p in val collect (r=p/256^2; g=p/256-r*256; b=mod p 256; color r g b)
    setpixels bitmap_convert [0,0] (unpack #(12632256, 12632256, 12632256, 12632256))
    setpixels bitmap_convert [0,1] (unpack #(255, 255, 255, 255))
    setpixels bitmap_convert [0,2] (unpack #(255, 255, 255, 255))
    setpixels bitmap_convert [0,3] (unpack #(255, 12632256, 12632256, 12632256))
    return bitmap_convert
    )
    ----------

Bitmap クラスの別の使用方法の詳細については、「Point3 値」の例を参照してください。