ビット深度の計算 (チャネル毎)
Namespace: FVIL.DataAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
public virtual int CalcDepthForChannel( int channel ) |
Visual Basic |
---|
Public Overridable Function CalcDepthForChannel ( channel As Integer ) As Integer |
Parameters
- channel
- Type: System..::..Int32
チャネル番号 (0~(Channel-1))
Return Value
Type: Int32ビット深度を 1~64 の間で返します。 画像種別が RGB24 または RGB32 の場合は、常に 8 を返します。
対応表:
画像種別 | ビット深度の範囲 | 備考 |
BIN | 1 | |
UC8 | 1~8 | |
S16 | 1~15 | 型の最小値(-32768) の場合は 15 を返します |
US16 | 1~16 | |
I32 | 1~31 | 型の最小値(-2147483648) の場合は 31 を返します |
UI32 | 1~32 | |
I64 | 1~63 | 型の最小値(-9223372036854775808) の場合は 63 を返します |
F32 | 1~32 | 32bpp を超える場合は 32 を返します |
D64 | 1~64 | 64bpp を超える場合は 64 を返します |
RGB24 | 8 | 常に 8 を返します |
RGB32 | 8 | 常に 8 を返します |
Remarks
指定されたチャネルの画像データから画素値の最大値と最小値を検索し、下記の範囲に収まる場合のビット深度を返します。
範囲) MAX(|最大値|,|最小値|) < (2depth)
例えば、-2<画素値<2 はビット深度 1 となり、-256<画素値<256 はビット深度 8 となります。
すべてのチャネルを対象にする場合は、
CalcDepth()()()()
を使用してください。
このメソッドは、メンバのビット深度(Depth)を更新しません。
計算した結果を反映する場合は Depth に設定してください。
処理に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
18 | FVIL.ErrorCode.INVALID_CHANNEL | チャネル数が無効です。 |
23 | FVIL.ErrorCode.NOT_ALLOCATED | 画像メモリが確保されていません。 |
Examples
下記は、画像の任意の位置に 126, 63, -127 を設定し、ビット深度を計算しています。
チャネル番号 2 の x=7,y=7 の位置にある画素値 -127 の絶対値が最大なので 7 が返ります。
計算した結果を Depth に設定して
CFviDisplay で表示すると
0~127 の画素値が 0~255 にスケーリングされます。
(CFviDisplay は、符号付き画像を 256 階調で表示する為に
このクラスの
SignedToRGB(Int32, CFviImage, UInt32)
メソッドを使用して RGB に変換しています)
チャネル番号 1 の画素値の範囲(0~63)に合わせてスケーリングしたい場合は、 下記のようにチャネル番号 1 だけでビット深度を計算します。 この場合は x=6,y=6 の位置にある画素値 63 の絶対値が最大なので 6 が返ります。 計算した結果を Depth に設定して CFviDisplay で表示すると 0~63 の画素値が 0~255 にスケーリングされます。 ビット深度 6 を超える画素値は、飽和表示されます。
C# | Copy |
---|---|
FVIL.Data.CFviImage image = new FVIL.Data.CFviImage(320,240,FVIL.ImageType.D64,3); image.SetPixelD64( 0,5,5, 126); // 0x7E: Math.Abs(value) ≦ 2^7-1 image.SetPixelD64( 1,6,6, 63); // 0x3F: Math.Abs(value) ≦ 2^6-1 image.SetPixelD64( 2,7,7, -127); // 0x7F: Math.Abs(value) ≦ 2^7-1 Console.WriteLine( "depth={0}", image.CalcDepth() ); |
チャネル番号 1 の画素値の範囲(0~63)に合わせてスケーリングしたい場合は、 下記のようにチャネル番号 1 だけでビット深度を計算します。 この場合は x=6,y=6 の位置にある画素値 63 の絶対値が最大なので 6 が返ります。 計算した結果を Depth に設定して CFviDisplay で表示すると 0~63 の画素値が 0~255 にスケーリングされます。 ビット深度 6 を超える画素値は、飽和表示されます。
Copy | |
---|---|
Console.WriteLine( "depth={0}", image.CalcDepthForChannel(1) ); |
Exceptions
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |