FFTハンドルの有効性チェック

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_fft_check_spec(
	FHANDLE hFFT,
	int iWidth,
	int iHeight,
	int iDirection,
	int iSignalDataType,
	int iFourierDataType
)
Visual Basic
Public Shared Function fnFIE_fft_check_spec ( 
	hFFT As FHANDLE,
	iWidth As Integer,
	iHeight As Integer,
	iDirection As Integer,
	iSignalDataType As Integer,
	iFourierDataType As Integer
) As Integer

Parameters

hFFT
Type: fvalgcli..::..FHANDLE
既存FFTハンドル
iWidth
Type: System..::..Int32
1次元FFTの場合はデータ長を入力。2次元FFTの場合は画像幅を入力。
iHeight
Type: System..::..Int32
1次元FFTの場合は0を入力。2次元FFTの場合は画像高さを入力。
iDirection
Type: System..::..Int32
実行するフーリエ変換の方向。 f_fft_direction を参照して下さい。
iSignalDataType
Type: System..::..Int32
時間領域データの形式。 f_fft_data_type を参照して下さい。
iFourierDataType
Type: System..::..Int32
周波数領域データの形式。 f_fft_data_type を参照して下さい。

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_OBJECT hFFT が IntPtr.Zero
F_ERR_INVALID_PARAMパラメータ不正
  • hFFT の型が F_OBJID_FFTSPEC ではない
  • 入力パラメータは有効なFIE_FFTのパラメータではない
F_ERR_FFT_INVALID_SPEC 既存FFTハンドルは指定された条件のFFTに適用できない
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        /// <summary>
        /// FFTハンドルの有効性チェック.
        /// </summary>
        [FvPluginExecute]
        public void fnFIE_fft_check_spec()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hTmp = FHANDLE.Zero;
            FHANDLE hFFT_1D = FHANDLE.Zero;
            FHANDLE hFFT_2D = FHANDLE.Zero;

            int width = 0;
            int height = 0;
            int type = 0;
            int channels = 0;
            int iOrder = 5;

            f_fft_direction iDirection = f_fft_direction.F_FFT_FORWARD;
            f_fft_normalize_type iNormalization = f_fft_normalize_type.F_FFT_DIV_BY_SQRTN;
            f_fft_data_type iSignalDataType_1D = f_fft_data_type.F_1D_FFT_FCOMPLEX;
            f_fft_data_type iFourierDataType_1D = f_fft_data_type.F_1D_FFT_FCOMPLEX;
            f_fft_data_type iSignalDataType_2D = f_fft_data_type.F_2D_FFT_REAL;
            f_fft_data_type iFourierDataType_2D = f_fft_data_type.F_2D_FFT_DOUBLEC;

            try
            {
                // 1次元FFT の場合.
                {
                    // 1次元FFT ハンドルの初期化.
                    status = api.fnFIE_fft_1D_alloc(ref hFFT_1D, iOrder, iDirection, iNormalization, iSignalDataType_1D, iFourierDataType_1D);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status);

                    // 1次元FFT ハンドルの有効性チェック.
                    status = api.fnFIE_fft_check_spec(hFFT_1D, (int)Math.Pow(2, iOrder), 0, (int)iDirection, (int)iSignalDataType_1D, (int)iFourierDataType_1D);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft_check_spec(1次元FFT ハンドル):エラーが発生しました。({0})", (f_err)status);

                }

                // 2次元FFT の場合.
                {
                    // 入力画像読み込み.
                    status = api.fnFIE_load_img_file(TestImageDir + "/testdata/lena512.bmp", ref hTmp, f_color_img_type.F_COLOR_IMG_TYPE_UC8);
                    Assert.IsTrue(hTmp != FHANDLE.Zero, "hTmp が異常です.");

                    //入力画像情報取得.
                    width = api.fnFIE_img_get_width(hTmp);
                    height = api.fnFIE_img_get_height(hTmp);
                    type = api.fnFIE_img_get_type(hTmp);
                    channels = api.fnFIE_img_get_channels(hTmp);

                    // 2次元FFT ハンドルの初期化.
                    status = api.fnFIE_fft_2D_alloc(ref hFFT_2D, width, height,
                        iDirection, iNormalization, iSignalDataType_2D, iFourierDataType_2D);

                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft_2D_alloc: エラーが発生しました。({0})", (f_err)status);

                    // 2次元FFT ハンドルの有効性チェック.
                    status = api.fnFIE_fft_check_spec(hFFT_2D, width, height, (int)iDirection, (int)iSignalDataType_2D, (int)iFourierDataType_2D);
                    Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fft_check_spec(2次元FFT ハンドル):エラーが発生しました。({0})", (f_err)status);
                }

            }
            finally
            {
                // オブジェクトの開放.
                hTmp.Dispose();
                hFFT_1D.Dispose();
                hFFT_2D.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    ''' <summary>
    ''' FFTハンドルの有効性チェック.
    ''' </summary>
    <FvPluginExecute> _
    Public Sub fnFIE_fft_check_spec()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hTmp As FHANDLE = FHANDLE.Zero
        Dim hFFT_1D As FHANDLE = FHANDLE.Zero
        Dim hFFT_2D As FHANDLE = FHANDLE.Zero

        Dim width As Integer = 0
        Dim height As Integer = 0
        Dim type As Integer = 0
        Dim channels As Integer = 0
        Dim iOrder As Integer = 5

        Dim iDirection As f_fft_direction = f_fft_direction.F_FFT_FORWARD
        Dim iNormalization As f_fft_normalize_type = f_fft_normalize_type.F_FFT_DIV_BY_SQRTN
        Dim iSignalDataType_1D As f_fft_data_type = f_fft_data_type.F_1D_FFT_FCOMPLEX
        Dim iFourierDataType_1D As f_fft_data_type = f_fft_data_type.F_1D_FFT_FCOMPLEX
        Dim iSignalDataType_2D As f_fft_data_type = f_fft_data_type.F_2D_FFT_REAL
        Dim iFourierDataType_2D As f_fft_data_type = f_fft_data_type.F_2D_FFT_DOUBLEC

        Try
            ' 1次元FFT の場合.
            If True Then
                ' 1次元FFT ハンドルの初期化.
                status = api.fnFIE_fft_1D_alloc(hFFT_1D, iOrder, iDirection, iNormalization, iSignalDataType_1D, iFourierDataType_1D)
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err))

                ' 1次元FFT ハンドルの有効性チェック.
                status = api.fnFIE_fft_check_spec(hFFT_1D, CInt(Math.Truncate(Math.Pow(2, iOrder))), 0, CInt(iDirection), CInt(iSignalDataType_1D), CInt(iFourierDataType_1D))
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft_check_spec(1次元FFT ハンドル):エラーが発生しました。({0})", CType(status, f_err))

            End If

            ' 2次元FFT の場合.
            If True Then
                ' 入力画像読み込み.
                status = api.fnFIE_load_img_file(TestImageDir & "/testdata/lena512.bmp", hTmp, f_color_img_type.F_COLOR_IMG_TYPE_UC8)
                Assert.IsTrue(hTmp <> FHANDLE.Zero, "hTmp が異常です.")

                '入力画像情報取得.
                width = api.fnFIE_img_get_width(hTmp)
                height = api.fnFIE_img_get_height(hTmp)
                type = api.fnFIE_img_get_type(hTmp)
                channels = api.fnFIE_img_get_channels(hTmp)

                ' 2次元FFT ハンドルの初期化.
                status = api.fnFIE_fft_2D_alloc(hFFT_2D, width, height, iDirection, iNormalization, iSignalDataType_2D, _
                    iFourierDataType_2D)

                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft_2D_alloc: エラーが発生しました。({0})", CType(status, f_err))

                ' 2次元FFT ハンドルの有効性チェック.
                status = api.fnFIE_fft_check_spec(hFFT_2D, width, height, CInt(iDirection), CInt(iSignalDataType_2D), CInt(iFourierDataType_2D))
                Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fft_check_spec(2次元FFT ハンドル):エラーが発生しました。({0})", CType(status, f_err))

            End If
        Finally
            ' オブジェクトの開放.
            hTmp.Dispose()
            hFFT_1D.Dispose()
            hFFT_2D.Dispose()
        End Try
    End Sub
End Class

See Also