亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? segmentation.cpp

?? winddk src目錄下的WDM源碼壓縮!
?? CPP
字號:
/*****************************************************************************
 *
 *  segmentation.cpp
 *
 *  Copyright (c) 2003 Microsoft Corporation.  All Rights Reserved.
 *
 *  DESCRIPTION:
 *
 *  CSegFilter is a simple sample segmentation filter, which works together with
 *  the wiadriver. It supports only three hardcoded regions.
 *  
 *******************************************************************************/

#include "stdafx.h"

#include "wiaitem.h"

#define COUNTOF(x) (sizeof(x)/sizeof(x[0]))

typedef struct _FILTER_IMAGE {
    double    XPOS;
    double    YPOS;
    double    XEXTENT;
    double    YEXTENT;
    double    DESKEWX;
    double    DESKEWY;
} FILTER_IMAGE;

static FILTER_IMAGE g_FilterImages[] = { { 0.25,   0.5625, 3.3125, 2.75,  0.0, 0.0 },
                                         { 4.0625, 0.5625, 4.1875, 3.625, 0.0, 0.0 },
                                         { 0.547,  4.66,   7.360,  6.173, 6.347, 1.35 } };
                                     
static WCHAR *gszChildNameBase = L"Sub Region #";

// {7B6D704B-A4F2-4ecf-8B86-8E0CF1A707F5}
static const GUID CLSID_WiaSegmentationFilter = 
{ 0x7b6d704b, 0xa4f2, 0x4ecf, { 0x8b, 0x86, 0x8e, 0xc, 0xf1, 0xa7, 0x7, 0xf5 } };

static LONG g_cLocks = 0;

void LockModule(void)   { InterlockedIncrement(&g_cLocks); }
void UnlockModule(void) { InterlockedDecrement(&g_cLocks); }

class CSegFilter : public IWiaSegmentationFilter
{
public:

    STDMETHODIMP
    QueryInterface(__in const IID& iid_requested, __out void** ppInterfaceOut);

    STDMETHODIMP_(ULONG)
    AddRef(void);

    STDMETHODIMP_(ULONG)
    Release(void);

    STDMETHODIMP
    DetectRegions(
                IN  LONG        lFlags,
        __in    IN  IStream     *pInputStream,
        __in    IN  IWiaItem2   *pWiaItem);

private:

    HRESULT
    GenerateChildNames(
                IN  DWORD       cChildNum,
        __out   OUT BSTR        *pbstrChildName);

    LONG        m_nRefCount;
};

///
///  QueryInterface
///
STDMETHODIMP
CSegFilter::QueryInterface(__in const IID& iid_requested, __out void** ppInterfaceOut)
{
    HRESULT hr = S_OK;

    hr = ppInterfaceOut ? S_OK : E_POINTER;

    if (SUCCEEDED(hr))
    {
        *ppInterfaceOut = NULL;
    }
    
    //
    //  We support IID_IUnknown and IID_IWiaSegmentationFilter
    //
    if (SUCCEEDED(hr))
    {
        if (IID_IUnknown == iid_requested) 
        {
            *ppInterfaceOut = static_cast<IUnknown*>(this);
        }
        else if (IID_IWiaSegmentationFilter == iid_requested) 
        {
            *ppInterfaceOut = static_cast<IWiaSegmentationFilter*>(this);
        }
        else
        {
            hr = E_NOINTERFACE;
        }
    }

    if (SUCCEEDED(hr))
    {
        reinterpret_cast<IUnknown*>(*ppInterfaceOut)->AddRef();
    }

    return hr;
}

///
///  AddRef
///
STDMETHODIMP_(ULONG)
CSegFilter::AddRef(void)
{
    if (m_nRefCount == 0)
    {
        LockModule();
    }

    return InterlockedIncrement(&m_nRefCount);
}

///
///  Release
///
STDMETHODIMP_(ULONG)
CSegFilter::Release(void)
{
    ULONG nRetval = InterlockedDecrement(&m_nRefCount);

    if (0 == nRetval) 
    {
        delete this;
        UnlockModule();
    }

    return nRetval;
}

/*****************************************************************************
 *  
 *  @doc INTERNAL
 *  
 *  @func STDMETHODIMP | CSegFilter::DetectRegions | Creates three child items with hardcoded coordinates
 *   
 *  @parm   LONG | lFlags | 
 *          Currently unused.
 *
 *  @parm   IStream | pInputStream |
 *          The (preview) image on which to perform segmentation. In this example the regions
 *          are hard-coded so we do not read pInputStream
 * 
 *  @parm   IWiaItem2 | pWiaItem | 
 *          The item under which to create the new child items.
 * 
 *  @comm
 *  Creates three child items with hardcoded coordinates. Notes that it sets deskew
 *  properties for one of the child items. This is only for demostration purposes since
 *  the driver cannot perform deskew.
 *
 *  @rvalue S_OK    | 
 *              The function succeeded.
 *  @rvalue E_XXX   | 
 *              The function failed 
 * 
 *****************************************************************************/
STDMETHODIMP
CSegFilter::DetectRegions(
            IN  LONG        lFlags,
    __in    IN  IStream     *pInputStream,
    __inout IN  IWiaItem2   *pWiaItem)
{
    HRESULT     hr;
    CWiaItem    *pIWiaItemWrapper      = NULL;
    IWiaItem2   *pChildIWiaItem        = NULL;
    LONG        xres_dpi, yres_dpi;
    LONG        lItemFlags =  WiaItemTypeGenerated |
                              WiaItemTypeTransfer  |
                              WiaItemTypeImage     |
                              WiaItemTypeFile      |
                              WiaItemTypeProgrammableDataSource;
   
    //
    // The filter does not read the input stream so we do not need to check it
    //
    hr = pWiaItem ? S_OK : E_INVALIDARG;

    if (SUCCEEDED(hr))
    {
        pIWiaItemWrapper = new CWiaItem();

        hr = pIWiaItemWrapper ? S_OK : E_OUTOFMEMORY;
    }

    if (SUCCEEDED(hr))
    {
        hr = pIWiaItemWrapper->SetIWiaItem(pWiaItem);

        if (SUCCEEDED(hr))
        {
            hr = pIWiaItemWrapper->ReadPropertyLong(WIA_IPS_XRES,&xres_dpi);
        }

        if (SUCCEEDED(hr))
        {
            hr = pIWiaItemWrapper->ReadPropertyLong(WIA_IPS_YRES,&yres_dpi);
        }
    }

    if (SUCCEEDED(hr))
    {
        BSTR            bstrChildName          = NULL;
        
        for (DWORD i = 0 ; i < COUNTOF(g_FilterImages) ; i++)
        {
            hr = GenerateChildNames(i, &bstrChildName);

            if (SUCCEEDED(hr))
            {
                hr = pWiaItem->CreateChildItem(lItemFlags, COPY_PARENT_PROPERTY_VALUES, bstrChildName, &pChildIWiaItem);
            }

            if (SUCCEEDED(hr))
            {
                hr = pIWiaItemWrapper->SetIWiaItem(pChildIWiaItem);

                if (SUCCEEDED(hr))
                {
                    hr = pIWiaItemWrapper->WritePropertyLong(WIA_IPS_XPOS, (LONG) (g_FilterImages[i].XPOS * xres_dpi));
                }

                if (SUCCEEDED(hr))
                {
                    hr = pIWiaItemWrapper->WritePropertyLong(WIA_IPS_YPOS, (LONG) (g_FilterImages[i].YPOS * yres_dpi));
                }

                if (SUCCEEDED(hr))
                {
                    hr = pIWiaItemWrapper->WritePropertyLong(WIA_IPS_XEXTENT, (LONG) (g_FilterImages[i].XEXTENT * xres_dpi));
                }

                if (SUCCEEDED(hr))
                {
                    hr = pIWiaItemWrapper->WritePropertyLong(WIA_IPS_YEXTENT, (LONG) (g_FilterImages[i].YEXTENT * yres_dpi));
                }

                if (SUCCEEDED(hr))
                {
                    hr = pIWiaItemWrapper->WritePropertyLong(WIA_IPS_DESKEW_X, (LONG) ((g_FilterImages[i].DESKEWX) * xres_dpi));
                }

                if (SUCCEEDED(hr))
                {
                    hr = pIWiaItemWrapper->WritePropertyLong(WIA_IPS_DESKEW_Y, (LONG) ((g_FilterImages[i].DESKEWY) * yres_dpi));
                }
            }

            if(pChildIWiaItem)
            {
                pChildIWiaItem->Release();
                pChildIWiaItem = NULL;
            }

            SysFreeString(bstrChildName);
            bstrChildName = NULL;
        }
    }

    if (pIWiaItemWrapper)
    {
        delete pIWiaItemWrapper;
    }

    return hr;
}

/*****************************************************************************
 *  
 *  @doc INTERNAL
 *  
 *  @func STDMETHODIMP | CSegFilter::GenerateChildNames | Generates names for a new child item
 *  
 *  @parm   DWORD | cChildNum | 
 *          The childs number 
 *  
 *  @parm   BSTR | pbstrChildName |
 *          On successful return contains the name of the child to be created
 * 
 *  @comm
 *  Helper function that generates names for a child item # cChildNum
 *
 *  @rvalue S_OK    | 
 *              The function succeeded.
 *  @rvalue E_XXX   | 
 *              The function failed 
 * 
 *****************************************************************************/
HRESULT
CSegFilter::GenerateChildNames(
            IN  DWORD       cChildNum,
    __out   OUT BSTR        *pbstrChildName)
{
    HRESULT     hr;
    WCHAR       szChildName[20];

    hr = pbstrChildName ? S_OK : E_INVALIDARG;

    if (SUCCEEDED(hr))
    {
        hr = StringCchPrintf(szChildName,
                             COUNTOF(szChildName),
                             L"%ws%d",
                             gszChildNameBase,
                             cChildNum);
    }

    if (SUCCEEDED(hr))
    {
        *pbstrChildName = SysAllocString(szChildName);

        hr = (*pbstrChildName) ? S_OK : E_OUTOFMEMORY;
    }

    return hr;
}

/*****************************************************************************
 *
 *  Class Object
 *
 *******************************************************************************/
class CFilterClass : public IClassFactory
{
public:

    STDMETHODIMP
    QueryInterface(__in const IID& iid_requested, __out void** ppInterfaceOut)
    {
        HRESULT hr = S_OK;

        hr = ppInterfaceOut ? S_OK : E_POINTER;

        if (SUCCEEDED(hr))
        {
            *ppInterfaceOut = NULL;
        }

        //
        //  We only support IID_IUnknown and IID_IClassFactory
        //
        if (SUCCEEDED(hr))
        {
            if (IID_IUnknown == iid_requested) 
            {
                *ppInterfaceOut = static_cast<IUnknown*>(this);
            }
            else if (IID_IClassFactory == iid_requested) 
            {
                *ppInterfaceOut = static_cast<IClassFactory*>(this);
            }
            else
            {
                hr = E_NOINTERFACE;
            }
        }

        if (SUCCEEDED(hr))
        {
            reinterpret_cast<IUnknown*>(*ppInterfaceOut)->AddRef();
        }
    
        return hr;
    }

    STDMETHODIMP_(ULONG)
    AddRef(void)
    {
        LockModule();
        return 2;
    }
    
    STDMETHODIMP_(ULONG)
    Release(void)
    {
        UnlockModule();
        return 1;
    }

    STDMETHODIMP
    CreateInstance(__in     IUnknown *pUnkOuter,
                   __in     REFIID   riid,
                   __out    void     **ppv)
    {
        CSegFilter   *pSegFilter = NULL;
        HRESULT      hr;

        hr = ppv ? S_OK : E_POINTER;

        if (SUCCEEDED(hr))
        {
            *ppv = 0;
        }

        if (SUCCEEDED(hr))
        {
            if (pUnkOuter)
            {
                hr = CLASS_E_NOAGGREGATION;
            }
        }

        if (SUCCEEDED(hr))
        {
            pSegFilter = new CSegFilter();

            hr = pSegFilter ? S_OK : E_OUTOFMEMORY;
        }

        if (SUCCEEDED(hr))
        {
            pSegFilter->AddRef();
            hr = pSegFilter->QueryInterface(riid, ppv);
            pSegFilter->Release();
        }

        return hr;
    }

    STDMETHODIMP
    LockServer(BOOL bLock)
    {
        if (bLock)
        {
            LockModule();
        }
        else
        {
            UnlockModule();
        }

        return S_OK;
    }
};

STDAPI DllCanUnloadNow(void)
{
    return (g_cLocks == 0) ? S_OK : S_FALSE;
}

STDAPI DllGetClassObject(__in    REFCLSID   rclsid,
                         __in    REFIID     riid,
                         __out   void       **ppv)
{
    static  CFilterClass s_FilterClass;

    HRESULT     hr;

    hr = ppv ? S_OK : E_INVALIDARG;

    if (SUCCEEDED(hr))
    {
        if (rclsid == CLSID_WiaSegmentationFilter)
        {
            hr = s_FilterClass.QueryInterface(riid, ppv);
        }
        else
        {
            *ppv = 0;
            hr = CLASS_E_CLASSNOTAVAILABLE;
        }
    }

    return hr;
}

STDAPI DllUnregisterServer()
{
    return S_OK;
}

STDAPI DllRegisterServer()
{
    return S_OK;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品素人视频| 欧美性色黄大片| 久久精品欧美日韩| 国产精品一区二区三区四区| 久久免费美女视频| 国产精品亚洲午夜一区二区三区| 久久夜色精品一区| 粉嫩aⅴ一区二区三区四区五区 | 欧美激情综合五月色丁香小说| 国产一区二区h| 国产日韩精品一区二区三区| 成人福利视频在线看| 亚洲欧美在线另类| 欧美在线小视频| 日日摸夜夜添夜夜添精品视频| 欧美一级片在线观看| 国产一区二区三区综合| 国产欧美一区二区三区沐欲| 色狠狠一区二区三区香蕉| 亚洲第一综合色| 精品国产乱码久久久久久蜜臀| 国产精品中文字幕欧美| 亚洲精品高清视频在线观看| 91麻豆精品国产综合久久久久久| 国模娜娜一区二区三区| 尤物在线观看一区| 欧美一区二区播放| jlzzjlzz欧美大全| 日韩av在线发布| 国产精品色在线| 欧美另类z0zxhd电影| 成人午夜免费电影| 天堂一区二区在线| 欧美国产精品久久| 欧美日韩国产大片| 成人国产在线观看| 日韩国产欧美在线视频| 国产精品伦一区| 欧美成人猛片aaaaaaa| 99re在线精品| 极品美女销魂一区二区三区免费| 一区二区在线观看免费视频播放| 精品国产一区二区亚洲人成毛片| 色综合久久中文字幕| 美腿丝袜亚洲综合| 亚洲精品亚洲人成人网| 国产亚洲自拍一区| 91精品国产高清一区二区三区蜜臀| 大白屁股一区二区视频| 爽爽淫人综合网网站| 国产精品国产自产拍在线| 日韩欧美视频在线| 欧美三级午夜理伦三级中视频| 高清不卡一区二区| 久久精品国产秦先生| 一区二区成人在线视频| 国产精品日日摸夜夜摸av| 91精品午夜视频| 日本高清成人免费播放| 99久久夜色精品国产网站| 国模套图日韩精品一区二区| 肉肉av福利一精品导航| 一级女性全黄久久生活片免费| 国产视频一区二区在线| 日韩欧美国产电影| 欧美一区二区三区免费| 欧美丰满少妇xxxxx高潮对白| 成人免费视频播放| 国产精品一二三区在线| 国产精品综合一区二区| 九九精品一区二区| 男人的天堂久久精品| 亚洲成人激情自拍| 亚洲永久免费视频| 亚洲精品少妇30p| 一区二区视频免费在线观看| 中文字幕一区二区5566日韩| 国产午夜精品福利| 中文字幕巨乱亚洲| 亚洲国产精品成人久久综合一区| 精品国产乱码久久久久久图片| 精品少妇一区二区三区免费观看| 欧美一区二区三区免费| 欧美电影免费提供在线观看| 日韩你懂的电影在线观看| 日韩精品中文字幕一区| 欧美精品一区二区久久久| 精品三级av在线| 国产日韩欧美激情| 国产精品亲子伦对白| 综合分类小说区另类春色亚洲小说欧美| 欧美激情艳妇裸体舞| 亚洲免费三区一区二区| 亚洲一区二区三区四区五区黄| 亚洲午夜视频在线| 日本vs亚洲vs韩国一区三区 | 国产精品国产三级国产aⅴ中文| 欧美国产精品一区| 一区二区三区日韩在线观看| 亚洲国产va精品久久久不卡综合| 日本成人超碰在线观看| 久久精品999| 成人动漫一区二区三区| 日本高清免费不卡视频| 日韩午夜激情视频| 欧美精品一区二区三区很污很色的 | www.亚洲在线| 在线观看国产91| 欧美r级在线观看| 国产精品美女www爽爽爽| 亚洲一区二区五区| 蜜桃久久av一区| 成人精品gif动图一区| 在线亚洲一区二区| 久久综合久久综合亚洲| 亚洲色图制服诱惑| 美女网站视频久久| 9色porny自拍视频一区二区| 欧美日韩在线电影| 久久先锋影音av鲁色资源网| 中文字幕综合网| 蜜臀国产一区二区三区在线播放 | 在线观看免费一区| 精品久久久久香蕉网| 亚洲欧美激情一区二区| 麻豆精品蜜桃视频网站| 欧美肥妇毛茸茸| 国产午夜精品在线观看| 亚洲777理论| 成人性生交大片免费看中文网站| 欧美日产在线观看| 国产精品日日摸夜夜摸av| 日韩av电影天堂| 99热99精品| www日韩大片| 婷婷六月综合网| 99国产精品久久久久久久久久久| 制服视频三区第一页精品| 国产精品国产馆在线真实露脸| 日韩电影在线一区二区三区| 99re这里只有精品视频首页| 欧美精品一区二区三区很污很色的 | 欧美精选一区二区| 国产精品伦理在线| 国模大尺度一区二区三区| 欧美日韩成人在线| 亚洲最大成人综合| 成人一区二区三区在线观看 | 在线观看www91| 国产精品色婷婷久久58| 久久99最新地址| 欧美一级二级三级乱码| 亚洲国产精品久久人人爱| 色综合天天综合色综合av | 日韩精品色哟哟| 一本久久综合亚洲鲁鲁五月天| 国产亚洲综合性久久久影院| 久久99久久久久久久久久久| 欧美日韩国产另类一区| 亚洲福利视频一区| 欧美性一区二区| 亚洲一区二区三区中文字幕| 99精品久久99久久久久| 最新高清无码专区| av中文字幕不卡| 中文字幕欧美激情一区| 国产不卡视频一区二区三区| 久久日韩精品一区二区五区| 韩国成人福利片在线播放| 久久这里只有精品视频网| 国产精品一区2区| 国产色爱av资源综合区| 国产91精品一区二区麻豆亚洲| 久久久蜜桃精品| 成人免费视频免费观看| 国产精品素人视频| 91免费看视频| 亚洲一二三四在线观看| 欧美三级中文字| 麻豆成人久久精品二区三区红| 欧美一级精品在线| 精品一区二区免费| 久久―日本道色综合久久| 成人午夜伦理影院| 亚洲欧美福利一区二区| 欧美最猛性xxxxx直播| 午夜在线电影亚洲一区| 91精品中文字幕一区二区三区| 天堂va蜜桃一区二区三区漫画版| 欧美一区二区在线视频| 国产最新精品精品你懂的| 久久久久久久久免费| 成人一区二区三区视频在线观看| 亚洲区小说区图片区qvod| 在线亚洲免费视频| 日本sm残虐另类| 久久精品一区二区三区av| 97久久久精品综合88久久| 亚洲成a人v欧美综合天堂下载| 日韩免费观看高清完整版在线观看|