RGBQUAD アンパッキング関数

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

Syntax

C#
public static int fnFIE_unpacking_rgb(
	FHANDLE hSrc,
	FHANDLE hDst
)
Visual Basic
Public Shared Function fnFIE_unpacking_rgb ( 
	hSrc As FHANDLE,
	hDst As FHANDLE
) As Integer

Parameters

hSrc
Type: fvalgcli..::..FHANDLE
処理対象画像( type: rgbq )
hDst
Type: fvalgcli..::..FHANDLE
処理結果画像( type: uc8, s16, us16, double )

Return Value

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

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_INVALID_IMAGE画像オブジェクトの異常
F_ERR_INVALID_PARAMパラメータ異常
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
//    $Revision: 1.1 $

#define UNPACKING_SAVE

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

using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        /// <summary>
        /// RGBQUAD アンパッキング関数.
        /// </summary>
        [FvPluginExecute]
        public void fnFIE_unpacking_rgb()
        {
            int status = (int)f_err.F_ERR_NONE;

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

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

                // 処理結果画像の確保.
                hDst = api.fnFIE_img_root_alloc(
                    (int)f_imgtype.F_IMG_UC8, 3,
                    api.fnFIE_img_get_width(hSrc),
                    api.fnFIE_img_get_height(hSrc)
                    );

                // 処理の実行.
                status = api.fnFIE_unpacking_rgb(hSrc, hDst);

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

                // 処理結果画像の保存.
#if UNPACKING_SAVE
                // RGB各成分を独立した濃淡画像として保存.
                {
                    IntPtr[] adrs = new IntPtr[1];
                    string[] rgb = { "R", "G", "B" };

                    int type = (int)f_imgtype.F_IMG_UC8;
                    SIZE_T step = api.fnFIE_img_get_step(hDst);
                    int width = api.fnFIE_img_get_width(hDst);
                    int height = api.fnFIE_img_get_height(hDst);

                    for (int i = 0; i < 3; i++)
                    {
                        adrs[0] = api.fnFIE_img_get_ch_adrs(hDst, i);
                        saveimg = api.fnFIE_img_root_import_alloc(adrs, 1, type, step, width, height);
                        api.fnFIE_save_png(ResultDir + "/fnFIE_unpacking_rgb_" + rgb[i] + ".png", saveimg, -1);
                        api.fnFIE_free_object(saveimg);
                        saveimg = IntPtr.Zero;
                    }

                }
#else
            // カラー画像として保存
            api.fnFIE_save_png(ResultDir + "/fnFIE_unpacking_rgb.png", hDst, -1);
#endif
            }
            finally
            {
                // オブジェクトの開放.
                hSrc.Dispose();
                hDst.Dispose();
                saveimg.Dispose();
            }
        }
    }
}


Visual Basic Copy imageCopy
'    $Revision: 1.1 $

#Const UNPACKING_SAVE = True

Imports System.Collections.Generic
Imports System.Text

Imports fvalgcli

Public Partial Class FIE
    ''' <summary>
    ''' RGBQUAD アンパッキング関数.
    ''' </summary>
    <FvPluginExecute> _
    Public Sub fnFIE_unpacking_rgb()
        Dim status As Integer = CInt(f_err.F_ERR_NONE)

        Dim hSrc As FHANDLE = FHANDLE.Zero
        ' 処理対象画像.
        Dim hDst As FHANDLE = FHANDLE.Zero
        ' 処理結果画像.
        Dim saveimg As FHANDLE = FHANDLE.Zero

        Try
            ' 処理対象画像のロード.
            api.fnFIE_load_bmp(TestImageDir & "/testdata/color_01.bmp", hSrc, f_color_img_type.F_COLOR_IMG_TYPE_RGBQ)

            ' 処理結果画像の確保.
            hDst = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_UC8), 3, api.fnFIE_img_get_width(hSrc), api.fnFIE_img_get_height(hSrc))

            ' 処理の実行.
            status = api.fnFIE_unpacking_rgb(hSrc, hDst)

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

            ' 処理結果画像の保存.
            #If UNPACKING_SAVE Then
            ' RGB各成分を独立した濃淡画像として保存.
            If True Then
                Dim adrs As IntPtr() = New IntPtr(0) {}
                Dim rgb As String() = {"R", "G", "B"}

                Dim type As Integer = CInt(f_imgtype.F_IMG_UC8)
                Dim [step] As SIZE_T = api.fnFIE_img_get_step(hDst)
                Dim width As Integer = api.fnFIE_img_get_width(hDst)
                Dim height As Integer = api.fnFIE_img_get_height(hDst)

                For i As Integer = 0 To 2
                    adrs(0) = api.fnFIE_img_get_ch_adrs(hDst, i)
                    saveimg = api.fnFIE_img_root_import_alloc(adrs, 1, type, [step], width, height)
                    api.fnFIE_save_png(ResultDir & "/fnFIE_unpacking_rgb_" & rgb(i) & ".png", saveimg, -1)
                    api.fnFIE_free_object(saveimg)
                    saveimg = IntPtr.Zero
                Next

            End If
            #Else
            ' カラー画像として保存
                #End If
            api.fnFIE_save_png(ResultDir & "/fnFIE_unpacking_rgb.png", hDst, -1)
        Finally
            ' オブジェクトの開放.
            hSrc.Dispose()
            hDst.Dispose()
            saveimg.Dispose()
        End Try
    End Sub
End Class

See Also