既存画像処理関数並列化テンプレート
Namespace: fvalgcliAssembly: 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 |
---|---|
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 |
---|---|
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 |