@@ -28,6 +28,7 @@ extern BOOL g_bDragging;
2828extern IDropTargetHelper *g_pDropTargetHelper;
2929extern LPFND2D1CreateFactory _D2D1CreateFactory;
3030extern LPFNDWriteCreateFactory _DWriteCreateFactory;
31+ extern IWICImagingFactory *g_pWICFactory;
3132
3233extern FORMATETC HDROPFormat;
3334extern FORMATETC IDLISTFormat;
@@ -2370,8 +2371,10 @@ CteWICBitmap::CteWICBitmap()
23702371 m_guidSrc = GUID_NULL;
23712372 m_pImage = NULL ;
23722373 m_pStream = NULL ;
2373- if FAILED (teCreateInstance (CLSID_WICImagingFactory, NULL , NULL , IID_PPV_ARGS (&m_pWICFactory))) {
2374- m_pWICFactory = NULL ;
2374+ if (!g_pWICFactory) {
2375+ if FAILED (teCreateInstance (CLSID_WICImagingFactory, NULL , NULL , IID_PPV_ARGS (&g_pWICFactory))) {
2376+ g_pWICFactory = NULL ;
2377+ }
23752378 }
23762379 for (int i = Count_WICFunc; i--;) {
23772380 m_ppDispatch[i] = NULL ;
@@ -2391,7 +2394,6 @@ CteWICBitmap::~CteWICBitmap()
23912394 for (int i = Count_WICFunc; i--;) {
23922395 SafeRelease (&m_ppDispatch[i]);
23932396 }
2394- SafeRelease (&m_pWICFactory);
23952397}
23962398
23972399VOID CteWICBitmap::ClearImage (BOOL bAll)
@@ -2523,12 +2525,12 @@ BOOL CteWICBitmap::Get(WICPixelFormatGUID guidNewPF)
25232525 }
25242526 BOOL b = FALSE ;
25252527 IWICFormatConverter *pConverter;
2526- if SUCCEEDED (m_pWICFactory ->CreateFormatConverter (&pConverter)) {
2528+ if SUCCEEDED (g_pWICFactory ->CreateFormatConverter (&pConverter)) {
25272529 if SUCCEEDED (pConverter->Initialize (m_pImage, guidNewPF, WICBitmapDitherTypeNone, NULL , 0 .0f , WICBitmapPaletteTypeMedianCut)) {
25282530 pConverter->GetPixelFormat (&guidPF);
25292531 if (IsEqualGUID (guidPF, guidNewPF)) {
25302532 IWICBitmap *pIBitmap;
2531- b = SUCCEEDED (m_pWICFactory ->CreateBitmapFromSource (pConverter, WICBitmapCacheOnDemand, &pIBitmap));
2533+ b = SUCCEEDED (g_pWICFactory ->CreateBitmapFromSource (pConverter, WICBitmapCacheOnDemand, &pIBitmap));
25322534 if (b) {
25332535 ClearImage (FALSE );
25342536 m_pImage = pIBitmap;
@@ -2546,7 +2548,7 @@ BOOL CteWICBitmap::GetEncoderClsid(LPWSTR pszName, CLSID* pClsid, LPWSTR pszMime
25462548 WCHAR pszType[MAX_PATH];
25472549 WCHAR pszExt[MAX_PATH];
25482550 LPWSTR pszExt0 = PathFindExtension (pszName);
2549- HRESULT hr = m_pWICFactory ->CreateComponentEnumerator (WICEncoder, WICComponentEnumerateDefault, &pEnum);
2551+ HRESULT hr = g_pWICFactory ->CreateComponentEnumerator (WICEncoder, WICComponentEnumerateDefault, &pEnum);
25502552 if SUCCEEDED (hr) {
25512553 ULONG cbActual = 0 ;
25522554 IUnknown *punk;
@@ -2617,7 +2619,7 @@ HRESULT CteWICBitmap::CreateBitmapFromHBITMAP(HBITMAP hBM, HPALETTE hPalette, in
26172619 }
26182620 }
26192621 IWICBitmap *pIBitmap;
2620- HRESULT hr = m_pWICFactory ->CreateBitmapFromHBITMAP (hBM, hPalette, (WICBitmapAlphaChannelOption)nAlpha, &pIBitmap);
2622+ HRESULT hr = g_pWICFactory ->CreateBitmapFromHBITMAP (hBM, hPalette, (WICBitmapAlphaChannelOption)nAlpha, &pIBitmap);
26212623 if SUCCEEDED (hr) {
26222624 ClearImage (FALSE );
26232625 m_pImage = pIBitmap;
@@ -2630,7 +2632,7 @@ HRESULT CteWICBitmap::CreateStream(IStream *pStream, CLSID encoderClsid, LONG lQ
26302632 HRESULT hr = E_FAIL;
26312633 if (pStream) {
26322634 IWICBitmapEncoder *pEncoder;
2633- if SUCCEEDED (m_pWICFactory ->CreateEncoder (encoderClsid, NULL , &pEncoder)) {
2635+ if SUCCEEDED (g_pWICFactory ->CreateEncoder (encoderClsid, NULL , &pEncoder)) {
26342636 if (m_pStream && (lQuality == -2 || ((lQuality == 0 || lQuality == 100 ) && IsEqualGUID (encoderClsid, m_guidSrc)))) {
26352637 teCopyStream (m_pStream, pStream);
26362638 hr = S_OK;
@@ -2657,7 +2659,7 @@ HRESULT CteWICBitmap::CreateStream(IStream *pStream, CLSID encoderClsid, LONG lQ
26572659 pFrameEncode->SetSize (w, h);
26582660 pFrameEncode->SetPixelFormat (&guidPF);
26592661 IWICPalette *pPalette = NULL ;
2660- if SUCCEEDED (m_pWICFactory ->CreatePalette (&pPalette)) {
2662+ if SUCCEEDED (g_pWICFactory ->CreatePalette (&pPalette)) {
26612663 if SUCCEEDED (m_pImage->CopyPalette (pPalette)) {
26622664 pFrameEncode->SetPalette (pPalette);
26632665 }
@@ -2753,13 +2755,13 @@ VOID CteWICBitmap::GetFrameFromStream(IStream *pStream, UINT uFrame, BOOL bKeepS
27532755 liOffset.QuadPart = 0 ;
27542756 pStream->Seek (liOffset, SEEK_SET, NULL );
27552757 IWICBitmapDecoder *pDecoder;
2756- if SUCCEEDED (m_pWICFactory ->CreateDecoderFromStream (pStream, NULL , WICDecodeMetadataCacheOnDemand, &pDecoder)) {
2758+ if SUCCEEDED (g_pWICFactory ->CreateDecoderFromStream (pStream, NULL , WICDecodeMetadataCacheOnDemand, &pDecoder)) {
27572759 IWICBitmapFrameDecode *pFrameDecode;
27582760 pDecoder->GetFrameCount (&m_uFrameCount);
27592761 if (m_uFrameCount) {
27602762 if SUCCEEDED (pDecoder->GetFrame (uFrame, &pFrameDecode)) {
27612763 IWICBitmap *pIBitmap;
2762- if SUCCEEDED (m_pWICFactory ->CreateBitmapFromSource (pFrameDecode, WICBitmapCacheOnDemand, &pIBitmap)) {
2764+ if SUCCEEDED (g_pWICFactory ->CreateBitmapFromSource (pFrameDecode, WICBitmapCacheOnDemand, &pIBitmap)) {
27632765 ClearImage (FALSE );
27642766 m_pImage = pIBitmap;
27652767 }
@@ -2868,10 +2870,10 @@ HRESULT CteWICBitmap::GetArchive(LPWSTR lpfn, int cx)
28682870VOID CteWICBitmap::RotateFlip (int n, BOOL bClearMeta)
28692871{
28702872 IWICBitmapFlipRotator *pFlipRotator;
2871- if SUCCEEDED (m_pWICFactory ->CreateBitmapFlipRotator (&pFlipRotator)) {
2873+ if SUCCEEDED (g_pWICFactory ->CreateBitmapFlipRotator (&pFlipRotator)) {
28722874 if SUCCEEDED (pFlipRotator->Initialize (m_pImage, static_cast <WICBitmapTransformOptions>(n))) {
28732875 IWICBitmap *pIBitmap;
2874- if SUCCEEDED (m_pWICFactory ->CreateBitmapFromSource (pFlipRotator, WICBitmapCacheOnDemand, &pIBitmap)) {
2876+ if SUCCEEDED (g_pWICFactory ->CreateBitmapFromSource (pFlipRotator, WICBitmapCacheOnDemand, &pIBitmap)) {
28752877 ClearImage (bClearMeta);
28762878 m_pImage = pIBitmap;
28772879 }
@@ -2888,7 +2890,7 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
28882890 if (pVarResult) {
28892891 VariantInit (pVarResult);
28902892 }
2891- if (!m_pWICFactory ) {
2893+ if (!g_pWICFactory ) {
28922894 return S_OK;
28932895 }
28942896 DISPID dispid = dispIdMember & TE_METHOD_MASK;
@@ -2933,7 +2935,7 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
29332935 }
29342936 IWICBitmap *pIBitmap;
29352937 if SUCCEEDED (punk->QueryInterface (IID_PPV_ARGS (&pIBitmap))) {
2936- m_pWICFactory ->CreateBitmapFromSource (pIBitmap, WICBitmapCacheOnLoad, &m_pImage);
2938+ g_pWICFactory ->CreateBitmapFromSource (pIBitmap, WICBitmapCacheOnLoad, &m_pImage);
29372939 pIBitmap->Release ();
29382940 teSetObject (pVarResult, GetBitmapObj ());
29392941 return S_OK;
@@ -2948,7 +2950,7 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
29482950
29492951 case TE_METHOD + 2 :// FromHICON
29502952 if (nArg >= 0 ) {
2951- m_pWICFactory ->CreateBitmapFromHICON ((HICON)GetPtrFromVariant (&pDispParams->rgvarg [nArg]), &m_pImage);
2953+ g_pWICFactory ->CreateBitmapFromHICON ((HICON)GetPtrFromVariant (&pDispParams->rgvarg [nArg]), &m_pImage);
29522954 teSetObject (pVarResult, GetBitmapObj ());
29532955 }
29542956 return S_OK;
@@ -3102,7 +3104,7 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
31023104 case TE_METHOD + 90 :// Create
31033105 if (nArg >= 1 ) {
31043106 IWICBitmap *pIBitmap;
3105- HRESULT hr = m_pWICFactory ->CreateBitmap (GetIntFromVariant (&pDispParams->rgvarg [nArg]), GetIntFromVariant (&pDispParams->rgvarg [nArg - 1 ]),
3107+ HRESULT hr = g_pWICFactory ->CreateBitmap (GetIntFromVariant (&pDispParams->rgvarg [nArg]), GetIntFromVariant (&pDispParams->rgvarg [nArg - 1 ]),
31063108 GUID_WICPixelFormat32bppBGRA, WICBitmapCacheOnLoad, &pIBitmap);
31073109 if SUCCEEDED (hr) {
31083110 ClearImage (FALSE );
@@ -3368,14 +3370,14 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
33683370 UINT w = GetIntFromVariant (&pDispParams->rgvarg [nArg]);
33693371 UINT h = GetIntFromVariant (&pDispParams->rgvarg [nArg - 1 ]);
33703372 IWICBitmapScaler *pScaler;
3371- if SUCCEEDED (m_pWICFactory ->CreateBitmapScaler (&pScaler)) {
3373+ if SUCCEEDED (g_pWICFactory ->CreateBitmapScaler (&pScaler)) {
33723374 int mode = nArg >= 2 ? GetIntFromVariant (&pDispParams->rgvarg [nArg - 2 ]) : 4 ;
33733375 if (!g_bUpper10 && mode > 3 ) {
33743376 mode = 3 ;
33753377 }
33763378 if SUCCEEDED (pScaler->Initialize (m_pImage, w, h, WICBitmapInterpolationMode (mode))) {
33773379 CteWICBitmap *pWB = new CteWICBitmap ();
3378- m_pWICFactory ->CreateBitmapFromSource (pScaler, WICBitmapCacheOnDemand, &pWB->m_pImage );
3380+ g_pWICFactory ->CreateBitmapFromSource (pScaler, WICBitmapCacheOnDemand, &pWB->m_pImage );
33793381 SafeRelease (&pScaler);
33803382 teSetObjectRelease (pVarResult, pWB);
33813383 }
@@ -3412,7 +3414,7 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
34123414 liOffset.QuadPart = 0 ;
34133415 m_pStream->Seek (liOffset, SEEK_SET, NULL );
34143416 IWICBitmapDecoder *pDecoder;
3415- if SUCCEEDED (m_pWICFactory ->CreateDecoderFromStream (m_pStream, NULL , WICDecodeMetadataCacheOnDemand, &pDecoder)) {
3417+ if SUCCEEDED (g_pWICFactory ->CreateDecoderFromStream (m_pStream, NULL , WICDecodeMetadataCacheOnDemand, &pDecoder)) {
34163418 IWICBitmapFrameDecode *pFrameDecode;
34173419 if SUCCEEDED (pDecoder->GetFrame (m_uFrame, &pFrameDecode)) {
34183420 IWICMetadataQueryReader *pMetadataQueryReader = NULL ;
@@ -3504,7 +3506,7 @@ STDMETHODIMP CteWICBitmap::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, W
35043506 IDispatch *pdisp;
35053507 if (nArg >= 2 && GetDispatch (&pDispParams->rgvarg [nArg - 2 ], &pdisp)) {
35063508 IEnumUnknown *pEnum;
3507- HRESULT hr = m_pWICFactory ->CreateComponentEnumerator (WICComponentType (GetIntFromVariant (&pDispParams->rgvarg [nArg])), WICComponentEnumerateDefault, &pEnum);
3509+ HRESULT hr = g_pWICFactory ->CreateComponentEnumerator (WICComponentType (GetIntFromVariant (&pDispParams->rgvarg [nArg])), WICComponentEnumerateDefault, &pEnum);
35083510 if SUCCEEDED (hr) {
35093511 int nMode = GetIntFromVariant (&pDispParams->rgvarg [nArg - 1 ]);
35103512 ULONG cbActual = 0 ;
0 commit comments