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

Namespace: FVIL.Ipl
Assembly: 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 メンバ内容
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] 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 imageCopy
// $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 imageCopy
' $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

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

See Also