画像データの複製 (3) (IPL → 画像オブジェクト)
Namespace: FVIL.IplAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
public virtual CFviImage ToCFviImage( ImageType type ) |
Visual Basic |
---|
Public Overridable Function ToCFviImage ( type As ImageType ) As CFviImage |
Parameters
- type
- Type: FVIL..::..ImageType
画像種別 [UC8,US16,S16,I32,F32,D64,RGB24,RGB32]
複製先の再確保を行う際の画像種別を示します。
チャネル数は IPL 側に従います。但し RGB24/RGB32 の場合は常に 1 チャネルになります。
Return Value
Type: CFviImage新しく生成した画像オブジェクトに画像データを複製して返します。
Remarks
このインスタンスの Pointer フィールドに有効なアドレスが設定されている必要があります。
処理可能な条件は、CopyTo(Object) と等価です。
処理に失敗した場合は例外が発行されます。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | 領域の確保に失敗しました。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | パラメータが不正です。 |
12 | FVIL.ErrorCode.INVALID_OBJECT | オブジェクトハンドルが無効です。 |
16 | FVIL.ErrorCode.INVALID_IMAGETYPE | 対応する画像種別がありません。 |
17 | FVIL.ErrorCode.INVALID_IMAGESIZE | 幅、高さが許容範囲外です。 |
18 | FVIL.ErrorCode.INVALID_CHANNEL | チャネル数が許容範囲外です。 |
21 | FVIL.ErrorCode.NOT_SUPPORTED | サポートしていない条件が指定されました。 |
23 | FVIL.ErrorCode.NOT_ALLOCATED | 画像データ領域が確保されていません。 |
96 | FVIL.ErrorCode.NOMATCH_IMAGESIZE | 画像の幅または高さが一致していません。 |
97 | FVIL.ErrorCode.NOMATCH_CHANNEL | 画像のチャネル数が一致していません。 |
Examples
出力結果:
ソースコード:
Copy | |
---|---|
[0] type=UC8, channels=3 [1] type=US16, channels=3 [2] type=S16, channels=3 [3] type=I32, channels=3 [4] type=F32, channels=3 [5] type=D64, channels=3 [6] type=RGB24, channels=1 [7] type=RGB32, channels=1 |
ソースコード:
C# | Copy |
---|---|
// $Revision: 1.2 $ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Drawing; using System.Reflection; namespace SampleCode.Ipl { partial class Converter { public static void ToCFviImage1() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); // 1) 画像準備. IntPtr src = cvLoadImage ("floppy_RGB.jpg", CV_LOAD_IMAGE.CV_LOAD_IMAGE_COLOR); if (src == IntPtr.Zero) throw new FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvLoadImage"); // 2) ポインタを IplImageConverter に設定する. FVIL.Ipl.IplImageConverter converter = new FVIL.Ipl.IplImageConverter(src); // 3) 複製.(CFviImage へ画像データを複製する) FVIL.ImageType[] types = { FVIL.ImageType.UC8, FVIL.ImageType.US16, FVIL.ImageType.S16, FVIL.ImageType.I32, FVIL.ImageType.F32, FVIL.ImageType.D64, FVIL.ImageType.RGB24, FVIL.ImageType.RGB32, }; for (int i = 0; i < types.Length; i++) { // -) 複製. using (FVIL.Data.CFviImage dst = converter.ToCFviImage(types[i])) { // -) 確認.(任意) Console.WriteLine("[{0}] type={1}, channels={2}", i, dst.ImageType, dst.Channel); } } // 4) 解放.(IplImage を 解放する) cvReleaseImage( ref src ); } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.2 $ Imports System.Collections.Generic Imports System.Text Imports System.Runtime.InteropServices Imports System.Drawing Imports System.Reflection Namespace Ipl Partial Class Converter Public Shared Sub ToCFviImage1() Console.WriteLine(MethodBase.GetCurrentMethod().Name) ' 1) 画像準備. Dim src As IntPtr = cvLoadImage("floppy_RGB.jpg", CV_LOAD_IMAGE.CV_LOAD_IMAGE_COLOR) If src = IntPtr.Zero Then Throw New FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvLoadImage") End If ' 2) ポインタを IplImageConverter に設定する. Dim converter As New FVIL.Ipl.IplImageConverter(src) ' 3) 複製.(CFviImage へ画像データを複製する) Dim types As FVIL.ImageType() = { _ FVIL.ImageType.UC8, _ FVIL.ImageType.US16, _ FVIL.ImageType.S16, _ FVIL.ImageType.I32, _ FVIL.ImageType.F32, _ FVIL.ImageType.D64, _ FVIL.ImageType.RGB24, _ FVIL.ImageType.RGB32} For i As Integer = 0 To types.Length - 1 ' -) 複製. Using dst As FVIL.Data.CFviImage = converter.ToCFviImage(types(i)) ' -) 確認.(任意) Console.WriteLine("[{0}] type={1}, channels={2}", i, dst.ImageType, dst.Channel) End Using Next ' 4) 解放.(IplImage を 解放する) cvReleaseImage(src) End Sub End Class End Namespace |
Exceptions
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |