Created
May 4, 2016 14:35
-
-
Save Polaringu/917964fee3920dae58d600768dba9255 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
template <typename T> | |
void ConvertAnnot(T* pData) | |
{ | |
float r = 0, g = 0, b = 0; | |
CComPtr<PXC::IColor> pFClr; | |
CComPtr<PXC::IColor> pSClr; | |
pData->get_FColor(&pFClr); | |
if (pFClr == nullptr) | |
return; | |
pData->get_SColor(&pSClr); | |
if (pSClr == nullptr) | |
return; | |
PXC::ColorType nType = PXC::ColorType_None; | |
pFClr->get_Type(&nType); | |
if (nType != PXC::ColorType_None) | |
{ | |
pFClr->GetRGB(&r, &g, &b); | |
float gray = (r * 0.212f) + (g * 0.701f) + (b * 0.087f); // "luminance" grayscale conversion. | |
pFClr->SetRGB(gray, gray, gray); | |
pData->put_FColor(pFClr); | |
} | |
nType = PXC::ColorType_None; | |
pSClr->get_Type(&nType); | |
if (nType != PXC::ColorType_None) | |
{ | |
pSClr->GetRGB(&r, &g, &b); | |
float gray = (r * 0.212f) + (g * 0.701f) + (b * 0.087f); // "luminance" grayscale conversion. | |
pSClr->SetRGB(gray, gray, gray); | |
pData->put_SColor(pSClr); | |
} | |
} | |
HRESULT ConvertAnnotationsToGrayscale(PXC::IPXC_Document* pDoc, PXC::IPXS_Inst* pSInst) | |
{ | |
PXC::ULONG_T freeTextAnnotType = 0; | |
pSInst->StrToAtom(L"FreeText", &freeTextAnnotType); | |
PXC::ULONG_T lineAnnotType = 0; | |
pSInst->StrToAtom(L"Line", &lineAnnotType); | |
PXC::ULONG_T squareAnnotType = 0; | |
pSInst->StrToAtom(L"Square", &squareAnnotType); | |
PXC::ULONG_T circleAnnotType = 0; | |
pSInst->StrToAtom(L"Circle", &circleAnnotType); | |
PXC::ULONG_T polygonAnnotType = 0; | |
pSInst->StrToAtom(L"Polygon", &polygonAnnotType); | |
PXC::ULONG_T polylineAnnotType = 0; | |
pSInst->StrToAtom(L"PolyLine", &polylineAnnotType); | |
PXC::ULONG_T redactAnnotType = 0; | |
pSInst->StrToAtom(L"Redact", &redactAnnotType); | |
HRESULT hr = S_OK; | |
do | |
{ | |
CComPtr<PXC::IPXC_Pages> pPages; | |
hr = pDoc->get_Pages(&pPages); | |
if (!pPages) | |
break; | |
PXC::ULONG_T nCnt = 0; | |
pPages->get_Count(&nCnt); | |
for (DWORD i = 0; i < nCnt; i++) | |
{ | |
CComPtr<PXC::IPXC_Page> pPage; | |
hr = pPages->get_Item(i, &pPage); | |
if (!pPage) | |
break; | |
PXC::ULONG_T nACount = 0; | |
pPage->GetAnnotsCount(&nACount); | |
for (DWORD j = 0; j < nACount; j++) | |
{ | |
CComPtr<PXC::IPXC_Annotation> pAnnot; | |
pPage->GetAnnot(j, &pAnnot); | |
if (!pAnnot) | |
continue; | |
PXC::ULONG_T nType = 0; | |
pAnnot->get_Type(&nType); | |
CComPtr<PXC::IPXC_AnnotData> pData; | |
hr = pAnnot->get_Data(&pData); | |
if (FAILED(hr)) | |
continue; | |
if (nType == freeTextAnnotType) | |
{ | |
CComPtr<PXC::IPXC_AnnotData_FreeText> pFTData = static_cast<PXC::IPXC_AnnotData_FreeText*>(pData.p); | |
ConvertAnnot(pFTData.p); | |
pAnnot->put_Data(pFTData); | |
} | |
else if (nType == lineAnnotType) | |
{ | |
CComPtr<PXC::IPXC_AnnotData_Line> pLData = static_cast<PXC::IPXC_AnnotData_Line*>(pData.p); | |
ConvertAnnot(pLData.p); | |
pAnnot->put_Data(pLData); | |
} | |
else if ((nType == squareAnnotType) || (nType == circleAnnotType)) | |
{ | |
CComPtr<PXC::IPXC_AnnotData_SquareCircle> pSCData = static_cast<PXC::IPXC_AnnotData_SquareCircle*>(pData.p); | |
ConvertAnnot(pSCData.p); | |
pAnnot->put_Data(pSCData); | |
} | |
else if ((nType == polygonAnnotType) || (nType == polylineAnnotType)) | |
{ | |
CComPtr<PXC::IPXC_AnnotData_Poly> pPData = static_cast<PXC::IPXC_AnnotData_Poly*>(pData.p); | |
ConvertAnnot(pPData.p); | |
pAnnot->put_Data(pPData); | |
} | |
else if (nType == redactAnnotType) | |
{ | |
CComPtr<PXC::IPXC_AnnotData_Redaction> pRData = static_cast<PXC::IPXC_AnnotData_Redaction*>(pData.p); | |
ConvertAnnot(pRData.p); | |
pAnnot->put_Data(pRData); | |
} | |
else | |
{ | |
float r = 0, g = 0, b = 0; | |
CComPtr<PXC::IColor> clr; | |
hr = pData->get_Color(&clr); | |
if (FAILED(hr)) | |
continue; | |
PXC::ColorType nType = PXC::ColorType_None; | |
clr->get_Type(&nType); | |
if (nType != PXC::ColorType_None) | |
{ | |
clr->GetRGB(&r, &g, &b); | |
float gray = (r * 0.212f) + (g * 0.701f) + (b * 0.087f); // "luminance" grayscale conversion. | |
clr->SetRGB(gray, gray, gray); | |
pData->put_Color(clr); | |
} | |
pAnnot->put_Data(pData); | |
} | |
} | |
} | |
} while (FALSE); | |
return hr; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment