内部画像メモリのサイズ変更

Namespace: FVIL.Data
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public virtual void SetSize(
	int horz,
	int vert,
	ImageType type,
	int ch,
	int alloc_option
)
Visual Basic
Public Overridable Sub SetSize ( 
	horz As Integer,
	vert As Integer,
	type As ImageType,
	ch As Integer,
	alloc_option As Integer
)

Parameters

horz
Type: System..::..Int32
画像領域の横方向サイズ (pixel) [1~] ※ 0 を指定すると解放します。
vert
Type: System..::..Int32
画像領域の縦方向サイズ (pixel) [1~] ※ 0 を指定すると解放します。
type
Type: FVIL..::..ImageType
画像種別
ch
Type: System..::..Int32
チャネル数 [1~16]
alloc_option
Type: System..::..Int32
オプション (0:既定の動作、1:DIBを使用しない)

Remarks

指定されたサイズで現在の画像データ領域を再確保します。


変更前の画像が内部メモリの場合は、画像データはすべて解放されて新たに画像メモリが確保されます。 変更前と変更後の画像サイズ・画像種別・チャネル数が一致する場合でも、領域は再確保されます。 変更前の画像がアタッチされていた場合は、デタッチされて新たに内部画像メモリが確保されます。

ビット深度は以下の条件によって設定されます。

  • type に変更があった場合: メモリが確保されるビット深度に変更されます。
  • type に変更が無い場合: ビット深度は変更されません。

設定された値を変更する場合は Depth を使用してください。
設定されている処理ウィンドウは全面に初期化されます。

オプションについて:
  • 0: 既定の動作

    CreateDIBSection を使用してメモリを確保します。(但し、指定された型(type)が BIN,UC8,RGB24,RGB32 の時のみ)
    利点は CFviDisplay で描画する際の CPU 負荷を低減できることです。
    欠点は 確保時の時間が長いことです。
    この他に後述の制限があります。

  • 1: DIB を使用しない

    fnFIE_img_root_alloc()()()() を使用してメモリを確保します。
    利点と欠点は前述の CreateDIBSection と逆です。
    画像処理に使用する一時的なバッファを確保する場合は、こちらの方が適しています。

CreateDIBSection は、2GB を超える領域を確保できません。 64bit アプリケーションでも、この挙動が見られます。 また、このオブジェクトがビットマップハンドルを保有する為、 インスタンスを大量に生成すると GDI リソースが枯渇します。 (GDI リソースの上限は OS 全体で 約 10,000 です。) alloc_option に 1 を指定すると、これらの制限を回避できます。 特にインスタンスを大量に生成する必要がある場合は、 DIB を使用しないようにしてください。

確保に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。

エラーコード:

ErrorCode メンバ内容
1FVIL.ErrorCode.FAILED_TO_ALLOCATEメモリの確保に失敗しました。
17FVIL.ErrorCode.INVALID_IMAGESIZE引数に指定された画像サイズが不正です。
16FVIL.ErrorCode.INVALID_IMAGETYPE引数に指定された画像種別が不正です。
18FVIL.ErrorCode.INVALID_CHANNEL引数に指定されたチャネル数が不正です。

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also