画像バッファへのアクセス
グラフィックツールなんですから、何はともあれ画像へのアクセスが必須になります。現在、
- オフスクリーン画像
- レイヤ画像
の二種類の画像バッファにアクセスできます。画像操作を行う際には、"mdi_img32_xxxxxxx" などの、mdi_img32から始まるAPIを呼び出す事になります。これらのAPIには、画像バッファへのインデックス情報が必要になります。インデックスを取得するには、
- local imgIndex = mdi_img_layer( layerImgIndex )
- local imgIndex = mdi_img_offscreen( offscreenImgIndex )
というAPIを呼び出す必要があります。mdi_img_layerの場合、取得したいアクティブなドキュメントのレイヤ番号を指定します。アクティブなレイヤを指定するなら、mdi_layer_active() で取得した値を渡すことになります。
オフスクリーン画像バッファを確保したい場合は、mdi_img_offscreenを呼び出してください。画像バッファの数は有限個なので、無茶な数は指定しないようにお願いします(笑)。
画像バッファについて
- オフスクリーン画像バッファは、スクリプト終了の際に破棄されます。
- 実際に描画処理を行うまで、メモリは殆ど食わない仕様になっています。
- オフスクリーン画像は、現状1024個作成する事ができます。
アンドゥ対応
既存のドキュメントに対して画像操作を行う場合、アンドゥ命令を発行しなければいけません。アンドゥ命令には、
- mdi_undo_layer()
- mdi_undo_all()
があり、前者の場合、アクティブなレイヤの編集を保護し、アンドゥで復帰できるようになります。後者の場合、アクティブなレイヤ以外、何処のレイヤが編集されてもアンドゥで復帰する事ができます。編集したにも関わらず、アンドゥ命令を発行しないと、ドキュメントが破綻する場合があります。
頂点命令について
- mdi_vertex_add( x, y )
- mdi_vertex_clear()
命令を組み合わせて、頂点情報を使った描画が行えます。頂点バッファは一つだけです。頂点バッファにpushされている情報を使って、
- mdi_img32_polygon
- mdi_img32_blob
- mdi_img32_stroke
などの命令を使った描画が行えます。詳しくはAPIの仕様をご覧ください。
形状の回転描画について
- mdi_img32_rect
- mdi_img32_ellipse
は、あらかじめ回転角を設定しておく事で、回転描画が行えます。回転角の指定には、以下のAPIを用います。
- mdi_shape_setrad( rad )
- mdi_shape_setdeg( deg )