既存画像処理関数並列化テンプレート

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

Syntax

C#
public static int fnFIE_img_filter_template_parallel(
	FHANDLE hsrc,
	FHANDLE hsrc_optional1,
	FHANDLE hsrc_optional2,
	FHANDLE hdst,
	F_TEMPLATE_FUNC_P block_func,
	IntPtr func_param,
	int block_width,
	int block_height,
	int border_left,
	int border_top,
	int border_right,
	int border_bottom,
	f_border_mode border_mode,
	double border_value
)
Visual Basic
Public Shared Function fnFIE_img_filter_template_parallel ( 
	hsrc As FHANDLE,
	hsrc_optional1 As FHANDLE,
	hsrc_optional2 As FHANDLE,
	hdst As FHANDLE,
	block_func As F_TEMPLATE_FUNC_P,
	func_param As IntPtr,
	block_width As Integer,
	block_height As Integer,
	border_left As Integer,
	border_top As Integer,
	border_right As Integer,
	border_bottom As Integer,
	border_mode As f_border_mode,
	border_value As Double
) As Integer

Parameters

hsrc
Type: fvalgcli..::..FHANDLE
入力画像ハンドル
hsrc_optional1
Type: fvalgcli..::..FHANDLE
入力画像ハンドル。必要なければ IntPtr.Zero を渡してください
hsrc_optional2
Type: fvalgcli..::..FHANDLE
入力画像ハンドル。必要なければ IntPtr.Zero を渡してください
hdst
Type: fvalgcli..::..FHANDLE
出力画像ハンドル
block_func
Type: fvalgcli..::..F_TEMPLATE_FUNC_P
並列化したい画像フィルタを記述したユーザー定義フィルタ関数の関数ポインタ
func_param
Type: System..::..IntPtr
オプションパラメータ。各画素で block_func が実行される際に参照できます。必要がなければ IntPtr.Zero を渡してください
block_width
Type: System..::..Int32
並列化する際、各々のスレッドが処理する幅(pixel) 1以上を指定してください。
block_height
Type: System..::..Int32
並列化する際、各々のスレッドが処理する高さ(pixel) 1以上を指定してください。
border_left
Type: System..::..Int32
block_func が左方向にアクセスするサイズ。0 以上を指定してください。
border_top
Type: System..::..Int32
block_func が上方向にアクセスするサイズ。0 以上を指定してください。
border_right
Type: System..::..Int32
block_func が右方向にアクセスするサイズ。0 以上を指定してください。
border_bottom
Type: System..::..Int32
block_func が下方向にアクセスするサイズ。0 以上を指定してください。
border_mode
Type: fvalgcli..::..f_border_mode
ボーダー処理モード。
  • F_BORDER_NONE ボーダー拡張しない
  • F_BORDER_ZERO 0埋めモード
  • F_BORDER_VALUE 一定値モード
  • F_BORDER_CONTINUOUS 端延長モード
  • F_BORDER_REPEAT 繰り返しモード
  • F_BORDER_MIRROR1 反転モード1
  • F_BORDER_MIRROR2 反転モード2
border_value
Type: System..::..Double
ボーダー濃度値。border_mode が F_BORDER_VALUE の場合のみ使用されます。その他のモードの場合、この値は無視されます。

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_IMAGE不正な画像オブジェクトが渡された
F_ERR_INVALID_PARAMパラメータ異常
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_NO_LICENCEライセンスエラー

Examples

C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_img_filter_template_parallel()
        {
            int status = (int)f_err.F_ERR_NONE;

            FHANDLE hSrc = FHANDLE.Zero;    // 処理対象画像.
            FHANDLE hOpt1 = FHANDLE.Zero;    // 処理対象画像.
            FHANDLE hOpt2 = FHANDLE.Zero;    // 処理対象画像.
            FHANDLE hDst = FHANDLE.Zero;    // 処理結果画像.

            try
            {
                // hSrc: 処理対象画像のロード.
                api.fnFIE_load_bmp(TestImageDir + "/testdata/fast2.bmp", ref hSrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8);

                int channels = api.fnFIE_img_get_channels(hSrc);
                int type = api.fnFIE_img_get_type(hSrc);
                int width = api.fnFIE_img_get_width(hSrc);
                int height = api.fnFIE_img_get_height(hSrc);

                // hDst: 処理結果画像の確保.
                hDst = api.fnFIE_img_root_alloc(type, channels, width, height);
                api.fnFIE_img_clear(hDst, 0);

                // ユーザー定義フィルタ関数のデリゲート.
                F_TEMPLATE_FUNC_P block_func = block_func_parallel;
                IntPtr func_param = IntPtr.Zero;

                int block_width = width / 8;
                int block_height = height / 8;
                int border = 2;

                // 処理の実行.
                status = api.fnFIE_img_filter_template_parallel(
                    hSrc, hOpt1, hOpt2, hDst,
                    block_func, func_param, block_width, block_height,
                    border, border, border, border,
                    f_border_mode.F_BORDER_NONE, 0.0);

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

                // 処理結果画像の保存.
                api.fnFIE_save_png(ResultDir + "/fnFIE_img_filter_template_parallel.png", hDst, -1);
            }
            finally
            {
                // オブジェクトの開放.
                hSrc.Dispose();
                hOpt1.Dispose();
                hOpt2.Dispose();
                hDst.Dispose();
            }
        }

        /// <summary>
        /// ユーザー定義フィルタ関数 block_func
        /// </summary>
        /// <param name="hsrc"></param>
        /// <param name="hopt1"></param>
        /// <param name="hopt2"></param>
        /// <param name="hdst"></param>
        /// <param name="param"></param>
        private int block_func_parallel(FHANDLE hsrc, FHANDLE hopt1, FHANDLE hopt2, FHANDLE hdst, IntPtr param)
        {
            int status = api.fnFIE_averageMxN(hsrc, hdst, 5, 5, f_border_mode.F_BORDER_NONE, 0);
            return status;
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_img_filter_template_parallel()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hSrc As FHANDLE = FHANDLE.Zero
        ' 処理対象画像.
        Dim hOpt1 As FHANDLE = FHANDLE.Zero
        ' 処理対象画像.
        Dim hOpt2 As FHANDLE = FHANDLE.Zero
        ' 処理対象画像.
        Dim hDst As FHANDLE = FHANDLE.Zero
        ' 処理結果画像.
        Try
            ' hSrc: 処理対象画像のロード.
            api.fnFIE_load_bmp(TestImageDir & "/testdata/fast2.bmp", hSrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8)

            Dim channels As Integer = api.fnFIE_img_get_channels(hSrc)
            Dim type As Integer = api.fnFIE_img_get_type(hSrc)
            Dim width As Integer = api.fnFIE_img_get_width(hSrc)
            Dim height As Integer = api.fnFIE_img_get_height(hSrc)

            ' hDst: 処理結果画像の確保.
            hDst = api.fnFIE_img_root_alloc(type, channels, width, height)
            api.fnFIE_img_clear(hDst, 0)

            ' ユーザー定義フィルタ関数のデリゲート.
            Dim block_func As F_TEMPLATE_FUNC_P = AddressOf block_func_parallel
            Dim func_param As IntPtr = IntPtr.Zero

            Dim block_width As Integer = width \ 8
            Dim block_height As Integer = height \ 8
            Dim border As Integer = 2

            ' 処理の実行.
            status = api.fnFIE_img_filter_template_parallel(hSrc, hOpt1, hOpt2, hDst, block_func, func_param, _
                block_width, block_height, border, border, border, border, _
                f_border_mode.F_BORDER_NONE, 0.0)

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

            ' 処理結果画像の保存.
            api.fnFIE_save_png(ResultDir & "/fnFIE_img_filter_template_parallel.png", hDst, -1)
        Finally
            ' オブジェクトの開放.
            hSrc.Dispose()
            hOpt1.Dispose()
            hOpt2.Dispose()
            hDst.Dispose()
        End Try
    End Sub

    ''' <summary>
    ''' ユーザー定義フィルタ関数 block_func
    ''' </summary>
    ''' <param name="hsrc"></param>
    ''' <param name="hopt1"></param>
    ''' <param name="hopt2"></param>
    ''' <param name="hdst"></param>
    ''' <param name="param"></param>
    Private Function block_func_parallel(hsrc As FHANDLE, hopt1 As FHANDLE, hopt2 As FHANDLE, hdst As FHANDLE, param As IntPtr) As Integer
        Dim status As Integer = api.fnFIE_averageMxN(hsrc, hdst, 5, 5, f_border_mode.F_BORDER_NONE, 0)
        Return status
    End Function
End Class

See Also