1 画素単位フィルターテンプレート。入出力画像の同じ座標の画素だけを参照した 1 画素単位の空間フィルタを実施します。 フィルタの内容はユーザーが引数 pixel_func で自由に指定できます。
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_img_filter_template_1x1( FHANDLE hsrc, FHANDLE hsrc_optional, FHANDLE hdst, F_TEMPLATE_FUNC_1x1 pixel_func, IntPtr func_param ) |
Visual Basic |
---|
Public Shared Function fnFIE_img_filter_template_1x1 ( hsrc As FHANDLE, hsrc_optional As FHANDLE, hdst As FHANDLE, pixel_func As F_TEMPLATE_FUNC_1x1, func_param As IntPtr ) As Integer |
Parameters
- hsrc
- Type: fvalgcli..::..FHANDLE
入力画像ハンドル
- hsrc_optional
- Type: fvalgcli..::..FHANDLE
入力画像ハンドル。必要なければ IntPtr.Zero を渡してください。その際は pixel_func の第 2 引数にアクセスしないでください。
- hdst
- Type: fvalgcli..::..FHANDLE
出力画像ハンドル
- pixel_func
- Type: fvalgcli..::..F_TEMPLATE_FUNC_1x1
1ピクセルだけ処理する内容を記述した関数のデリゲート
- func_param
- Type: System..::..IntPtr
オプションパラメータ。各画素で pixel_func が実行される際に参照できます。必要がなければ IntPtr.Zero を渡してください。
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが渡された |
F_ERR_INVALID_PARAM | パラメータ異常 |
F_ERR_NO_LICENCE | ライセンスエラー |
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { /// <summary> /// 1画素単位フィルターテンプレート. /// </summary> [FvPluginExecute] public void fnFIE_img_filter_template_1x1() { int status = (int)f_err.F_ERR_NONE; FHANDLE hSrc1 = FHANDLE.Zero; // 処理対象画像. FHANDLE hSrc2 = FHANDLE.Zero; // 処理対象画像. FHANDLE hDst = FHANDLE.Zero; // 処理結果画像. try { // 処理対象画像のロード. api.fnFIE_load_bmp(TestImageDir + "/testdata/colorpack111.bmp", ref hSrc1, f_color_img_type.F_COLOR_IMG_TYPE_UC8); api.fnFIE_load_bmp(TestImageDir + "/testdata/fast2.bmp", ref hSrc2, f_color_img_type.F_COLOR_IMG_TYPE_UC8); int channels = api.fnFIE_img_get_channels(hSrc1); int type = api.fnFIE_img_get_type(hSrc1); int width = api.fnFIE_img_get_width(hSrc1); int height = api.fnFIE_img_get_height(hSrc1); // 処理結果画像の確保. hDst = api.fnFIE_img_root_alloc(type, channels, width, height); // ピクセル処理関数のデリゲート. F_TEMPLATE_FUNC_1x1 pixel_func = pixel_func_1x1; IntPtr func_param = IntPtr.Zero; // 処理の実行. status = api.fnFIE_img_filter_template_1x1(hSrc1, hSrc2, hDst, pixel_func, func_param); // エラー判定. Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 処理結果画像の保存. api.fnFIE_save_png(ResultDir + "/fnFIE_img_filter_template_1x1.png", hDst, -1); } finally { // オブジェクトの開放. hSrc1.Dispose(); hSrc2.Dispose(); hDst.Dispose(); } } /// <summary> /// ピクセル処理関数.(UC8 のみ対応) /// </summary> /// <param name="src_pixel"></param> /// <param name="src_opt_pixel"></param> /// <param name="dst_pixel"></param> /// <param name="param"></param> private void pixel_func_1x1(IntPtr src_pixel, IntPtr src_opt_pixel, IntPtr dst_pixel, IntPtr param) { // 注意) 簡素化の為、UC8 限定にしています. UCHAR_PTR src = src_pixel; UCHAR_PTR opt = src_opt_pixel; UCHAR_PTR dst = dst_pixel; // アルファブレンド. double val = (0.5 * src[0] + 0.5 * opt[0]); if (val < 0) dst[0] = 0; else if (val > 255) dst[0] = 255; else dst[0] = (byte)val; } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE ''' <summary> ''' 1画素単位フィルターテンプレート. ''' </summary> <FvPluginExecute> _ Public Sub fnFIE_img_filter_template_1x1() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hSrc1 As FHANDLE = FHANDLE.Zero ' 処理対象画像. Dim hSrc2 As FHANDLE = FHANDLE.Zero ' 処理対象画像. Dim hDst As FHANDLE = FHANDLE.Zero ' 処理結果画像. Try ' 処理対象画像のロード. api.fnFIE_load_bmp(TestImageDir & "/testdata/colorpack111.bmp", hSrc1, f_color_img_type.F_COLOR_IMG_TYPE_UC8) api.fnFIE_load_bmp(TestImageDir & "/testdata/fast2.bmp", hSrc2, f_color_img_type.F_COLOR_IMG_TYPE_UC8) Dim channels As Integer = api.fnFIE_img_get_channels(hSrc1) Dim type As Integer = api.fnFIE_img_get_type(hSrc1) Dim width As Integer = api.fnFIE_img_get_width(hSrc1) Dim height As Integer = api.fnFIE_img_get_height(hSrc1) ' 処理結果画像の確保. hDst = api.fnFIE_img_root_alloc(type, channels, width, height) ' ピクセル処理関数のデリゲート. Dim pixel_func As F_TEMPLATE_FUNC_1x1 = AddressOf pixel_func_1x1 Dim func_param As IntPtr = IntPtr.Zero ' 処理の実行. status = api.fnFIE_img_filter_template_1x1(hSrc1, hSrc2, hDst, pixel_func, func_param) ' エラー判定. Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 処理結果画像の保存. api.fnFIE_save_png(ResultDir & "/fnFIE_img_filter_template_1x1.png", hDst, -1) Finally ' オブジェクトの開放. hSrc1.Dispose() hSrc2.Dispose() hDst.Dispose() End Try End Sub ''' <summary> ''' ピクセル処理関数.(UC8 のみ対応) ''' </summary> ''' <param name="src_pixel"></param> ''' <param name="src_opt_pixel"></param> ''' <param name="dst_pixel"></param> ''' <param name="param"></param> Private Sub pixel_func_1x1(src_pixel As IntPtr, src_opt_pixel As IntPtr, dst_pixel As IntPtr, param As IntPtr) ' 注意) 簡素化の為、UC8 限定にしています. Dim src As UCHAR_PTR = src_pixel Dim opt As UCHAR_PTR = src_opt_pixel Dim dst As UCHAR_PTR = dst_pixel ' アルファブレンド. Dim val As Double = (0.5 * src(0) + 0.5 * opt(0)) If val < 0 Then dst(0) = 0 ElseIf val > 255 Then dst(0) = 255 Else dst(0) = CByte(Math.Truncate(val)) End If End Sub End Class |