📄 pxtransp.cpp
字号:
// include
#include "hxtypes.h"
#include "hxwintyp.h"
#include "hxcom.h"
#include "ihxpckts.h"
// pnmisc
#include "hxparse.h"
// pxcomlib
#include "pxtransp.h"
HX_RESULT ParseTransparencyParameters(IHXValues* pValues,
REF(UINT32) rulBgOpacity,
REF(BOOL) rbBgOpacitySpecified,
REF(UINT32) rulMediaOpacity,
REF(BOOL) rbMediaOpacitySpecified,
REF(UINT32) rulChromaKey,
REF(BOOL) rbChromaKeySpecified,
REF(UINT32) rulChromaKeyTolerance,
REF(UINT32) rulChromaKeyOpacity,
REF(BOOL) rbAlphaChannelNeeded)
{
HX_RESULT retVal = HXR_OK;
if (pValues)
{
// Get the background opacity
IHXBuffer* pStr = NULL;
HX_RESULT rv = pValues->GetPropertyCString("backgroundOpacity", pStr);
if (SUCCEEDED(rv))
{
UINT32 ulTmp = 0;
retVal = HXParseOpacity((const char*) pStr->GetBuffer(), ulTmp);
if (SUCCEEDED(retVal))
{
rulBgOpacity = ulTmp;
rbBgOpacitySpecified = TRUE;
if (rulBgOpacity < 255)
{
rbAlphaChannelNeeded = TRUE;
}
}
}
if (SUCCEEDED(retVal))
{
// Get the media opacity
HX_RELEASE(pStr);
rv = pValues->GetPropertyCString("mediaOpacity", pStr);
if (SUCCEEDED(rv))
{
UINT32 ulTmp = 0;
retVal = HXParseOpacity((const char*) pStr->GetBuffer(), ulTmp);
if (SUCCEEDED(retVal))
{
rulMediaOpacity = ulTmp;
rbMediaOpacitySpecified = TRUE;
if (rulMediaOpacity < 255)
{
rbAlphaChannelNeeded = TRUE;
}
}
}
}
if (SUCCEEDED(retVal))
{
// Get the media chromakey
HX_RELEASE(pStr);
rv = pValues->GetPropertyCString("chromaKey", pStr);
if (SUCCEEDED(rv))
{
UINT32 ulTmp = 0;
retVal = HXParseColorUINT32((const char*) pStr->GetBuffer(), ulTmp);
if (SUCCEEDED(retVal))
{
rulChromaKey = ulTmp;
rbChromaKeySpecified = TRUE;
rbAlphaChannelNeeded = TRUE;
}
}
}
if (SUCCEEDED(retVal))
{
// Get the media chromakey tolerance
HX_RELEASE(pStr);
rv = pValues->GetPropertyCString("chromaKeyTolerance", pStr);
if (SUCCEEDED(rv))
{
UINT32 ulTmp = 0;
retVal = HXParseColorUINT32((const char*) pStr->GetBuffer(), ulTmp);
if (SUCCEEDED(retVal))
{
rulChromaKeyTolerance = ulTmp;
}
}
}
if (SUCCEEDED(retVal))
{
// Get the chroma key opacity
HX_RELEASE(pStr);
rv = pValues->GetPropertyCString("chromaKeyOpacity", pStr);
if (SUCCEEDED(rv))
{
UINT32 ulTmp = 0;
retVal = HXParseOpacity((const char*) pStr->GetBuffer(), ulTmp);
if (SUCCEEDED(rv))
{
rulChromaKeyOpacity = ulTmp;
}
}
}
HX_RELEASE(pStr);
}
else
{
retVal = HXR_FAIL;
}
return retVal;
}
BOOL DoesChromaKeyChannelMatch(UINT32 ulColor,
UINT32 ulChromaKey,
UINT32 ulChromaKeyTol)
{
BOOL bRet = FALSE;
INT32 lDiff = ((INT32) ulColor) - ((INT32) ulChromaKey);
if (lDiff < 0)
{
lDiff = -lDiff;
}
if (lDiff <= (INT32) ulChromaKeyTol)
{
bRet = TRUE;
}
return bRet;
}
BOOL DoesChromaKeyMatch(UINT32 ulColor,
UINT32 ulChromaKey,
UINT32 ulChromaKeyTol)
{
BOOL bRet = FALSE;
if (DoesChromaKeyChannelMatch(ARGB32_RED(ulColor),
ARGB32_RED(ulChromaKey),
ARGB32_RED(ulChromaKeyTol)) &&
DoesChromaKeyChannelMatch(ARGB32_GREEN(ulColor),
ARGB32_GREEN(ulChromaKey),
ARGB32_GREEN(ulChromaKeyTol)) &&
DoesChromaKeyChannelMatch(ARGB32_BLUE(ulColor),
ARGB32_BLUE(ulChromaKey),
ARGB32_BLUE(ulChromaKeyTol)))
{
bRet = TRUE;
}
return bRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -