ビットマップ値

> ビットマップ値

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

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

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

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

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

ビットマップを異なる形式で保存するためのプロパティの中には、BMPJPEG、およびTIF など、さまざまな BMPIO クラスで公開されるものがあります。これらの設定は、ビットマップ イメージの filename プロパティのに設定する必要があります。

たとえば、同じ jpeg イメージの 2 つのバージョンを異なる画質で保存するには、次のように設定します。

dib = gw.getViewportDib()
jpeg.setQuality 20
dib.filename= @"C:\temp\myjpeg20.jpg"
save dib
jpeg.setQuality 90
dib.filename= @"C:\temp\myjpeg90.jpg"
save dib

コンストラクタ

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

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

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> [colorSpace:<string>] [gamma:<float>]

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

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

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

3ds Max 2024 の新機能: オプションの colorSpace キーワード パラメータが指定されている場合、これは要求されたカラー スペース名になります。要求されたカラー スペースが使用できない場合、ビットマップに適用される実際のカラー スペースではないことがあります。このキーワード パラメータは、OCIO ベースのカラー管理モードがアクティブな場合にのみ有効です。

オプションの gamma キーワード パラメータが指定されている場合、これはガンマ値になります。このパラメータは、ガンマベースのカラー管理モードがアクティブな場合にのみ有効です。

selectBitMap [caption:<open_dialog_title_string>]

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

<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 が含まれます。

カラー管理プロパティ

3ds Max 2024 の新機能: このプロパティは OCIO カラー管理ワークフローで使用します。

.colorSpace

ビットマップに割り当てられるカラー スペース名です。

.colorSpaceSource

カラー スペースの割り当て元です。次のいずれかになります。

.colorSpaceReq

要求されたカラー スペースの名前です。

.colorSpaceReqSource

要求されたカラー スペースのソースです。次のいずれかになります。

.colorSpaceStatus

カラー スペースの現在の割り当て状態です。次のいずれかになります。

.colorSpaceRule

カラー スペースが入力規則によって割り当てられている場合(.colorSpaceSource#inputRules)、このプロパティには、カラー スペースを割り当てた入力ルールの名前が保持されます。

メソッド

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 に最終的なサーフェスがあることを示しています。-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 (SDK)のヘルプを参照してください。

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
<enum>validateColorSpace <bitmap>

3ds Max 2024 の新機能: 割り当てられたカラー スペースを、現在使用可能なカラー スペースと比較してチェックおよび検証します。割り当てられたカラー スペースが見つからない場合、または現在のセットアップで使用できない場合は、要求されたカラー スペース、ファイル入力ルール、その他の設定やヒューリスティックに基づいて、有効なカラー スペースが割り当てられます。

検証後に割り当てられたカラー スペースのステータスと可能な割り当てのステータスを返します。次のいずれかの値が返されます。

<enum>SetOutputColorConversion <bitmap> <enum outputConversion> [outputColorSpace:<string>] [outputDisplay:<string>] [outputViewTransform:<string>]

3ds Max 2024 の新機能: ビットマップのカラー スペース出力変換設定を設定します。outputConversion の値は次のうちのいずれかになります。

outputConversion#automatic または #noConversion に設定されている場合、他のパラメータを指定する必要はありません。outputConversion#colorSpaceConversion の場合、outputColorSpace を指定する必要があります。outputConversion#displayViewTransform の場合は、引数 outputDisplay および outputViewTransform を指定する必要があります。

キーワード引数 outputColorSpace は、要求する出力カラー スペースを指定します。

キーワード引数 outputDisplay は、要求する出力表示を指定します。

キーワード引数 outputViewTransform は、要求する表示/ビュー変換を指定します。

<bitmap> colorConvert <bitmap> <colorspace_string>
<bitmap> colorConvert <bitmap> <displayname_string> <viewtransform_string>

3ds Max 2024 の新機能: ソース ビットマップを変換して返します。このメソッドには 2 つのバージョンがあります。1 番目のメソッドは、ビットマップの変換先となるカラー スペースの名前を取ります。もう 1 つのメソッドは、表示/ビュー変換ペアを使用します。このメソッドは、渡されたパラメータのいずれかに問題がある場合、MAXScript ランタイム エラーをスローします。問題の例としては、ビットマップが無効である、指定したカラー スペースや表示/ビュー変換が現在の OCIO カラー管理設定に含まれていない、指定した表示に対してビュー変換が使用できないなどがあります。

例:

-- get color spaces
colorspaces = ColorPipelineMgr.GetFileIOColorSpaceList()
displays = ColorPipelineMgr.GetDisplayList()
-- get views for the first display
views = colorPipelineMgr.GetViewList displays[1]

dib = gw.getViewportDib()
-- first version: convert to a specified colorspace
dib2 = colorConvert dib colorspaces[1]
-- second version: convert to a specified display/view pair
dib3 = colorConvert dib displays[1] views[1]

format "dib colorspace: %" dib.colorspace
format "dib2 colorspace: %" dib2.colorspace
format "dib3 colorspace: %" dib3.colorspace

関連するメソッド:

<boolean>setSilentMode <boolean>

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

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

silentMode()

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

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

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

ビットマップを保存するダイアログ ボックスをユーザがキャンセルした場合は、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 値」の例を参照してください。