値 > ビットマップ値 |
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:<bool>]
空のビットマップを作成します。返されるビットマップ値は保存可能なビットマップです。
filename: パラメータでは、 save メソッドを使用してビットマップを保存するファイルの名前を設定できます。既存のビットマップ ファイル名を指定すると、ビットマップ ファイルの内容はビットマップ値に読み込まれません。
numframes : パラメータにより、マルチフレーム ビットマップを作成できます。
color : パラメータにより、ビットマップ内の全ピクセルに初期カラーを設定できます。
gamma : パラメータにより、新規に作成したビットマップにガンマを設定できます。
pixelAspect : パラメータにより、新規に作成したビットマップにピクセル アスペクトを設定できます。
channels : パラメータにより、作成するチャネルを指定します。これはプロパティとしても使用できます。有効な名前の一覧は、getChannel メソッドのマニュアルを参照してください。
3ds Max 8 で導入されたオプションの hdr: パラメータが true に設定されていると、コンストラクタはチャネルあたり 8 ビットではなく、32 ビットのビットマップ値を作成します。
指定されたビットマップ ファイルの内容を含むビットマップ値を返します。返されるビットマップ値は、ロード専用ビットマップです。
3ds Max 9 以前では、指定されたビットマップ ファイルが存在しない場合は、ランタイム エラーが生成されていました。
3ds Max 2008 以降 では、指定されたビットマップが存在しない場合、値 undefined が戻されます。
このメソッドは、ユーザがビットマップ ファイルを選択できるようにイメージ入力選択ブラウザを表示します。選択されたビットマップ ファイルの内容を含むビットマップ値、あるいは undefined 値(ユーザがブラウザ内で[キャンセル](Cancel)ボタンを押した場合)を返します。返されるビットマップ値は、ロード専用ビットマップです。
既存のビットマップをコピーし、ビットマップの一意なインスタンスを作成します。
ソース ビットマップがロード専用の場合、返されるビットマップ値は、ファイル名が Null でフレームが 1 つしかない一時的なビットマップ値です。
コピーするビットマップがマルチ フレーム ファイルの場合、フレーム 0 に現在のフレームの新しいコピーを作成します。
ビットマップに関連付けられたファイル名を取得または設定します。
256 色の配列を生成します(現在の 3ds Max SDK 内にバグがあるため、256 エントリ以外のパレット ファイルでは作業を行うことができません)。以下に述べる getIndexedPixels() 関数で取得されたカラー インデックスでこの配列にアクセスする際には注意してください。その理由はこのインデックスは、基数が 0 で、MAXScript 配列インデックスは基数が 1 であるからです。ビットマップがパレットされていなければ、 undefined を生成します。現在、MAXScript では、パレット ビットマップを作成できません。ただし、既存のパレット ビットマップに対しては読み込みや書き込みができます。
マルチ フレーム ファイルでの現在のフレーム番号を取得および設定します。このプロパティは、ロード専用ビットマップでのみ設定できます。.avi および .mov などの固有のマルチ フレーム ファイルにおけるフレーム番号の基数は 0 です。
マルチ フレーム ファイル内のフレーム数。単一のイメージファイルには 1 を生成します。
<bitmap>.inputGamma : {#auto | #default | Float}
この値は、ビットマップ値がイメージ ファイルからロードされた時に設定されたガンマ モードを反映します。
詳細については、「ビットマップ ガンマおよび MAXScript」を参照してください。
<bitmap>.inputGammaValue : Float
詳細については、「ビットマップ ガンマおよび MAXScript」を参照してください。
ビットマップのピクセル アスペクトを返します。この値は、ピクセルに対するアスペクトであって、ピットマップ イメージに対するアスペクトではありません。
このプロパティにより、ビットマップ内で使用可能なビットマップ チャネルを取得および設定します。有効な名前の一覧は、getChannel メソッドのマニュアルを参照してください。
このプロパティには、ビットマップにアルファ チャネルがある場合に true、アルファ チャネルがない場合に false が含まれます。
イメージを表示している仮想フレームバッファ(VFB)を開きます。
ビットマップへの変更は、VFB の表示には自動的に反映されません。
VFB を更新するには、この関数を再度呼び出す必要があります。
ビットマップ値の frame プロパティを設定すると、VFB が更新されます。
各ビットマップはそれぞれ VFB を持ちます(2 つの異なるビットマップを表示すると、2 つの VFB が表示されます)。
3ds Max 2015 以降は、オプション キーワード引数 caption: が文字列として指定されている場合、これが VFB のタイトル バーのキャプションとして表示されます。
ビットマップに関連付けられている VFB が開いている場合は、それを閉じます。
ビットマップの現在の状態を保存します。ファイル名が最初に設定されていることを確認します。
マルチ フレーム イメージ ファイルを保存するとき、 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 を返します。
ビットマップに関連付けられたビットマップ ファイルが出力用に開かれている場合、このファイルを閉じます。ビットマップ値に対して save をはじめて呼び出すと、出力用のビットマップ ファイルが開きます。ビットマップに関連付けられた仮想フレーム バッファ(レンダリング フレーム ウィンドウ)が開かれている場合は、それを閉じます。この関数は、内部的なピクセル フレーム バッファやビットマップに割り当てられていたすべてのメモリを解放します。たとえば、レンダリング ループなどでたくさんのビットマップを生成する場合、 close() 関数を使用して大量のメモリを解放します。そうしないと、次のガベージ コレクションまでメモリが解放されません。
ガベージ コレクションを待たずに、ビットマップ値によって使用されているメモリを解放します。
ソース ビットマップをコピー先ビットマップにコピーします。2 つのビットマップのサイズが異なる場合は、イメージはコピー先のビットマップのサイズに合わせて調整されます。
マルチ フレーム ファイル(avi、flc など)をフレーム frame に配置します。このメソッドはロード専用ビットマップでのみ使用できます。.avi および .mov などの固有のマルチ フレーム ファイルにおけるフレーム番号の基数は 0 です。VFB が開いている場合はそれを更新します。
カラー値の配列としてビットマップ内の行からピクセルのシーケンスを検索します。
coord_point2 引数は一番上の左のピクセルが[0,0]の状態にある開始ピクセル座標を指定します。
Point2 座標の .x コンポーネントは列、 .y コンポーネントは行です。
シーケンスは 1 行のみから派生する必要があります。複数の行にまたがるピクセルのシーケンスは取得できません。
境界外の座標を使用したり、行の境界を越えて検索すると、失敗して空の配列が生じることになります。
3ds Max 2014 に導入されたオプションの linear: キーワード パラメータを True に設定すると、ガンマ値が 1.0 の線形値にアクセスでき、False に設定すると未加工のデータにアクセスすることができます(既定値、3ds Max 2014 より前の古い動作)。
与えられた配列内の値に対して Point2 の座標から始まるビットマップ内の 1 行に、ピクセルのシーケンスを設定します。Point2 座標の .x コンポーネントは列、 .y コンポーネントは行です。設定するピクセル数は配列のサイズで決まります。 getPixels() のように、行の境界を越えてピクセル シーケンスを設定することはできません。
パレット インデックス番号の配列としてピクセルの行を検索します。coord_point2 引数は一番上の左のピクセルが 0,0 の状態にある開始ピクセル座標を指定します。インデックス番号は 0 が原点です。
所定の配列内のカラー インデックスに対して Point2 の座標から始まるピクセルの行を設定します。設定するピクセル数は配列のサイズで決まります。カラー インデックスは、基数 0 です。行の境界を越えるピクセル シーケンスは設定できません。
2D 座標で指定されたピクセルに対応する名前のチャネルに関する G-バッファ チャネルのデータを取得します。 chan_name 引数は、チャネル識別子を指定する次の値の中から選択されます。
#zDepth #matID #objectID #UVCoords #normal #unClamped #coverage #node #mask #shaderColor #shaderTransparency #velocity #weight
ビットマップが要求されたチャネルを含む場合は、返される値は必ず値の配列となり、各値はそのピクセルのチャネルで前から後ろへ順に表示されるレイヤに対応しています。ビットマップが要求されたチャネルを含まない場合は、 undefined 値を返します。通常は、.rla ファイルを開くか、MAXScript の render() 関数を指定の channels: パラメータとともに使用して、チャネルを含むビットマップを取得します。前面のオブジェクトに透明度が設定されている場合は、配列内の複数の値が取得されます。
配列で返される値の型は、次のようにチャネルの種類に応じて異なります。
#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 を選択することもできます。パラメータは次のとおりです。
ソース ビットマップには、ソース G-バッファ チャネルのデータが含まれています。
マスクの生成元のチャネルです。 chan_name の値については、 getChannel() メソッドの説明を参照してください。
マスクを書き込むための既存のビットマップを指定します。ビットマップの幅と高さはソース ビットマップと一致している必要があります。
作成されるビットマップと関連付けられたファイル名を指定します。
作成されるビットマップのピクセル アスペクトを指定します。この値は、ピクセルに対するアスペクトであって、ピットマップ イメージに対するアスペクトではありません。
データを抽出するソース ビットマップのチャネル レイヤを指定します。既定値は 1 です。
true の場合は、生成されたビットマップが反転します。規定値は、 false です。
サブマスクを指定します。これらのパラメータのいずれかを指定すると、作成されるマスクは与えられた node、objectID、または materialID を表示するピクセルのデータのみを保持するようにクリップされます。このサブマスクを使用するには、 #node 、 #objectID 、 #matID の各チャネルがソース ビットマップに存在することを確認する必要があります。また、 #coverage チャネルがソース ビットマップに表示されている場合は、サブマスクは適用範囲のデータによってアンチエイリアシングされます。
これらのパラメータは、選択されたチャネルが #velocity の場合のみ指定できます。 velocity パラメータの既定値は #magnitude です。これらのパラメータは次のように作成するビットマップをコントロールします。
作成するビットマップ ピクセル値は、ピクセルの移動方向の角度に対して同じ比率になります。角度が 0 度(直角に対して水平)のマッピングでは輝度の値は 0 になり、180 度のマッピングでは輝度の値は 127 になり、360 度のマッピングでは輝度の値は 255 となります。
作成するビットマップ値は速度に比例します。速度が高いと、低い場合より暗くなります。
作成するビットマップ ピクセル値は、与えられた角度からのピクセルの移動方向の傾きに比例します。指定の角度では輝度の値が 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 機能拡張として提供されていた機能です。
ソース ブロックの位置は src_box2 または src_point2 を使用して指定し、コピー先は dest_point2 を使用して指定します。
ブロックの幅と高さは、src_box2 を使用するか、src_point2 が指定されている場合はソース ビットマップの残りのサイズによって指定します。
maskColor: が指定されている場合は、src_bitmap 内の色つきのピクセルは dest_bitmap にコピーされません。
type: が #composite の場合は、次のソースのソース アルファが使用されます。 clamp (R = S + D * (1-S.alpha)) 。
type: が #blend の場合は、次のソースのソース アルファが使用されます。 R = S * S.alpha + D * (1-S.alpha) 。
type:#composite と type:#blend の両方の場合は、 R.alpha = S.alpha + D.alpha * (1-S.alpha) になります。
type: が #composite または #blend の場合は、ソース アルファに alphaMultiplier: の値(指定されない場合は既定値で 1.0)が乗じられます。
type: が #function の場合、オプションの function: パラメータには、4 つの引数(ソース ピクセル カラー、ソース ピクセルの場所、2 番目のソース ピクセル カラー、2 番目のソース ピクセルの場所)を取得するユーザ定義関数を指定できます。2 番目のソースは目的先のビットマップです。戻り値は目的先のビットマップのピクセル内に保存された関数です。
カスタム合成の例 |
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 番目の例を参照してください。 |
指定されたビットマップ ファイルの情報を 13 要素の配列として返します。3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
9. ビットマップにアルファが含まれているかどうか(Boolean)
12. ビットマップの種類(BitmapInfo::Type() より、Integer) ビットマップの種類について詳しくは、SDK ヘルプ ファイルの「Bitmap Types」のトピックを参照してください。
13. ビットマップ フラグ(BitmapInfo::Flags() より、Integer) 各ビットの意味について詳しくは、SDK ヘルプ ファイルの「Bitmap Flags」のトピックを参照してください。
forceReloadBitmapFile <bitmap>
指定されたビットマップに関連付けられているビットマップ ファイルの再ロードを強制します。
<boolean>registerFileChangedFunction <bitmap> <callback_functions>
1 番目の引数で指定されたビットマップのファイル変更コールバック関数を登録します。
2 番目の引数は、1 つの引数が必要な MAXScript の関数である必要があります。
成功した場合は True を、失敗した場合は False を返します。
サイレント モード(ユーザによる確認がない)をオンまたはオフにします。サイレント モードがオフの場合、ビットマップ入力中あるいは出力中にエラーが発生すると、3ds Max ビットマップ入出力ルーチンによりエラー メッセージが表示されます。サイレント モードがオンの場合、エラー メッセージは表示されません。このメソッドは、サイレント モードの前の状態を表すブール値を返します。
サイレント モードの状態は内部 3ds Max 状態を表します。他の 3ds Max プラグインではこの状態をオンあるいはオフに変更できます。このメソッドを使用する場合は、状態をオンあるいはオフにして戻り値を保存し、ビットマップ入力あるいは出力を実行してから、状態を元の値に戻すことをお勧めします。
[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 |
画像ファイルのビットマップ キャッシュが使用しているメモリをすべて解放します。これはメモリがさまざまなビットマップでフラグメント化されており、現在アクティブなものだけを再ロードしたい場合に便利です。
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」を参照してください。
ビットマップ ファイルを開くと、フレーム全体がメモリにロードされます。ビットマップの処理が終了したら、ビットマップ上で close() を呼び出すか、 undefined 値をビットマップ値を格納する変数に割り当てて、ガベージ コレクション( gc light:true )を手動で実行してメモリを解放することをお勧めします。 render() または getChannelAsMask() 関数を繰り返し使用する場合にメモリの消費を抑える別の方法は、 to:<bitmap> キーワード引数を使用することです。この引数により、関数は新しいレンダリングまたはマスクを持つ既存のビットマップのピクセル イメージを上書きできます。
現在、ビットマップ出力のプラグインのうち、特定のものに関連付けられているプロパティへはアクセスできません。すなわち、.avi ファイルに使用されているコーデックは設定できないことになります。プロパティには、3ds Max で該当するファイル形式を保存する際に最後に使われたプロパティが使用されます。
次のスクリプトは、マルチ フレーム イメージ ファイルの正しい作成方法、および AVI ファイルとしての保存方法を示します。
次のスクリプトでは、ビットマップ ファイルを読み込み、同じビットマップを再作成する関数を実装しているリスナーにスクリプトを出力します。その処理の後、この関数をスクリプト内にコピーできます。この機能は、スクリプトとともにビットマップ ファイルを配布する必要がないように、MAXScript でボタン イメージを作成する際に便利です。
Bitmap クラスの別の使用方法の詳細については、「Point3 値」の例を参照してください。