画像データの複製 (3) (IPL → FIE 画像オブジェクト)

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

Syntax

C#
public virtual FHANDLE ToFIE(
	f_imgtype type
)
Visual Basic
Public Overridable Function ToFIE ( 
	type As f_imgtype
) As FHANDLE

Parameters

type
Type: fvalgcli..::..f_imgtype
画像種別 [UC8,US16,S16,I32,FLOAT,DOUBLE,RGBTRIPLE,RGBQUAD] 複製先の再確保を行う際の画像種別を示します。
チャネル数は IPL 側に従います。但し RGBTRIPLE/RGBQUAD の場合は常に 1 チャネルになります。

Return Value

Type: FHANDLE
新しく生成した FIE 画像オブジェクトに画像データを複製して返します。
使用後は Dispose()()()() (または fnFIE_free_object(FHANDLE)) で解放してください。

Remarks

このインスタンスの Pointer フィールドに有効なアドレスが設定されている必要があります。
処理可能な条件は、CopyTo(Object) と等価です。

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


エラーコード:
ErrorCode メンバ内容
1FVIL.ErrorCode.FAILED_TO_ALLOCATE領域の確保に失敗しました。
11FVIL.ErrorCode.INVALID_PARAMETER引数に指定されたインスタンスが不正です。
12FVIL.ErrorCode.INVALID_OBJECTオブジェクトハンドルが無効です。
16FVIL.ErrorCode.INVALID_IMAGETYPE対応する画像種別がありません。
17FVIL.ErrorCode.INVALID_IMAGESIZE幅、高さが許容範囲外です。
18FVIL.ErrorCode.INVALID_CHANNELチャネル数が許容範囲外です。
21FVIL.ErrorCode.NOT_SUPPORTEDサポートしていない条件が指定されました。
23FVIL.ErrorCode.NOT_ALLOCATED画像データ領域が確保されていません。
96FVIL.ErrorCode.NOMATCH_IMAGESIZE画像の幅または高さが一致していません。
97FVIL.ErrorCode.NOMATCH_CHANNEL画像のチャネル数が一致していません。

Examples

出力結果:
Copy imageCopy
[0] bpp=8
[1] bpp=24
[2] bpp=32


ソースコード:
C# Copy imageCopy
// $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Reflection;
using fvalgcli;

namespace SampleCode.Ipl
{
    partial class Converter
    {
        public static void ToFIE1()
        {
            Console.WriteLine(MethodBase.GetCurrentMethod().Name);

            IntPtr src = IntPtr.Zero;

            try
            {
                // 1) 画像準備.
                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) 複製.(FIE 画像オブジェクトへ画像データを複製する)
                f_imgtype[] types = 
                {
                    f_imgtype.F_IMG_UC8,
                    f_imgtype.F_IMG_US16,
                    f_imgtype.F_IMG_S16,
                    f_imgtype.F_IMG_I32,
                    f_imgtype.F_IMG_FLOAT,
                    f_imgtype.F_IMG_DOUBLE,
                    f_imgtype.F_IMG_RGBTRIPLE,
                    f_imgtype.F_IMG_RGBQUAD,
                };
                for(int i=0 ; i<types.Length ; i++)
                {
                    // -) 複製.
                    using (FHANDLE hdst = converter.ToFIE( types[i] ))
                    {
                        // -) 確認.(任意)
                        f_imgtype type = (f_imgtype)api.fnFIE_img_get_type(hdst);
                        int channels = api.fnFIE_img_get_channels(hdst);
                        Console.WriteLine("[{0}] type={1}, channels={2}", i, type, channels);
                    }
                }
            }
            finally
            {
                // 4) 解放.(IplImage を 解放する)
                cvReleaseImage( ref src );
            }
        }
    }
}


Visual Basic Copy imageCopy
' $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports System.Reflection
Imports fvalgcli

Namespace Ipl
    Partial Class Converter
        Public Shared Sub ToFIE1()
            Console.WriteLine(MethodBase.GetCurrentMethod().Name)

            Dim src As IntPtr = IntPtr.Zero

            Try
                ' 1) 画像準備.
                src = 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) 複製.(FIE 画像オブジェクトへ画像データを複製する)
                Dim types As f_imgtype() = { _
                  f_imgtype.F_IMG_UC8, _
                  f_imgtype.F_IMG_US16, _
                  f_imgtype.F_IMG_S16, _
                  f_imgtype.F_IMG_I32, _
                  f_imgtype.F_IMG_FLOAT, _
                  f_imgtype.F_IMG_DOUBLE, _
                  f_imgtype.F_IMG_RGBTRIPLE, _
                  f_imgtype.F_IMG_RGBQUAD}
                For i As Integer = 0 To types.Length - 1
                    ' -) 複製.
                    Using hdst As FHANDLE = converter.ToFIE(types(i))
                        ' -) 確認.(任意)
                        Dim type As f_imgtype = CType(api.fnFIE_img_get_type(hdst), f_imgtype)
                        Dim channels As Integer = api.fnFIE_img_get_channels(hdst)
                        Console.WriteLine("[{0}] type={1}, channels={2}", i, type, channels)
                    End Using
                Next
            Finally
                ' 4) 解放.(IplImage を 解放する)
                cvReleaseImage(src)
            End Try
        End Sub
    End Class
End Namespace

Exceptions

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

See Also