@@ -6,6 +6,28 @@ using namespace Gdiplus;
66
77const LARGE_INTEGER c_liZero = { 0 , 0 };
88
9+ //
10+ // CBaseImageParser
11+ //
12+ CBaseImageParser::CBaseImageParser () :
13+ m_uWidth(0 ),
14+ m_uHeight(0 ),
15+ m_uMaxValue(0 ),
16+ m_uDataLen(0 ),
17+ m_spStream(nullptr ),
18+ m_rgData(nullptr ),
19+ m_imageType(PortableImageFormatType_Invalid)
20+ {
21+ GdiplusStartupInput gdiPlusStatupInput;
22+ GdiplusStartup (&_gdiPlusToken, &gdiPlusStatupInput, nullptr );
23+ }
24+
25+ CBaseImageParser::~CBaseImageParser ()
26+ {
27+ delete [] m_rgData;
28+ GdiplusShutdown (_gdiPlusToken);
29+ }
30+
931HRESULT CBaseImageParser::CreateParserFromStream (_In_ IStream* pStream, _Outptr_ CBaseImageParser** ppImageParser)
1032{
1133 *ppImageParser = nullptr ;
@@ -43,25 +65,6 @@ HRESULT CBaseImageParser::CreateParserFromStream(_In_ IStream* pStream, _Outptr_
4365 return hr;
4466}
4567
46- CBaseImageParser::CBaseImageParser () :
47- m_uWidth(0 ),
48- m_uHeight(0 ),
49- m_uMaxValue(0 ),
50- m_uDataLen(0 ),
51- m_spStream(nullptr ),
52- m_rgData(nullptr ),
53- m_imageType(PortableImageFormatType_Invalid)
54- {
55- GdiplusStartupInput gdiPlusStatupInput;
56- GdiplusStartup (&_gdiPlusToken, &gdiPlusStatupInput, nullptr );
57- }
58-
59- CBaseImageParser::~CBaseImageParser ()
60- {
61- delete [] m_rgData;
62- GdiplusShutdown (_gdiPlusToken);
63- }
64-
6568HRESULT CBaseImageParser::GetBitmap (
6669 _Out_ HBITMAP* phBitmap)
6770{
@@ -91,7 +94,7 @@ HRESULT CBaseImageParser::GetBitmap(
9194 return hr;
9295}
9396
94- HRESULT CBaseImageParser::ReadImageType (_In_ IStream * pStream, _Out_ PortableImageFormatType* pImageType)
97+ HRESULT CBaseImageParser::ReadImageType (_In_ IStream* pStream, _Out_ PortableImageFormatType* pImageType)
9598{
9699 *pImageType = PortableImageFormatType_Invalid;
97100 HRESULT hr = pStream ? S_OK : E_INVALIDARG;
@@ -122,21 +125,7 @@ HRESULT CBaseImageParser::ReadImageHeaders()
122125 if (SUCCEEDED (hr))
123126 {
124127 // First get the portable image type
125- while (SUCCEEDED (hr) && m_imageType == PortableImageFormatType_Invalid)
126- {
127- // Verify type
128- UINT type = 0 ;
129- hr = ParseImageLineForNum (m_spStream, " P%u" , &type);
130- if (SUCCEEDED (hr))
131- {
132- hr = (type > PortableImageFormatType_Invalid && type < PortableImageFormatType_Count) ? S_OK : E_FAIL;
133- if (SUCCEEDED (hr))
134- {
135- m_imageType = static_cast <PortableImageFormatType>(type);
136- }
137- }
138- }
139-
128+ hr = ReadImageType (m_spStream, &m_imageType);
140129 if (SUCCEEDED (hr))
141130 {
142131 // Parse width, height and max. PBMA and PBMB don't have max values.
@@ -472,7 +461,7 @@ HRESULT CBaseImageParser::ResizeBitmap(
472461{
473462 *phbmpResized = nullptr ;
474463
475- Bitmap * pBitmap = new Bitmap (hbmpOriginal, nullptr );
464+ Bitmap* pBitmap = new Bitmap (hbmpOriginal, nullptr );
476465 HRESULT hr = pBitmap ? S_OK : E_OUTOFMEMORY;
477466 if (SUCCEEDED (hr))
478467 {
@@ -503,13 +492,13 @@ HRESULT CBaseImageParser::ResizeBitmap(
503492 }
504493 }
505494
506- Bitmap * pResizeBitmap = new Bitmap (desiredWidth, desiredHeight, PixelFormat24bppRGB);
495+ Bitmap* pResizeBitmap = new Bitmap (desiredWidth, desiredHeight, PixelFormat24bppRGB);
507496 hr = pResizeBitmap ? S_OK : E_OUTOFMEMORY;
508497 if (SUCCEEDED (hr))
509498 {
510499 pResizeBitmap->SetResolution (pBitmap->GetHorizontalResolution (), pBitmap->GetVerticalResolution ());
511500
512- Graphics * pgrResize = new Graphics (pResizeBitmap);
501+ Graphics* pgrResize = new Graphics (pResizeBitmap);
513502 hr = pgrResize ? S_OK : E_OUTOFMEMORY;
514503 if (SUCCEEDED (hr))
515504 {
@@ -539,8 +528,9 @@ HRESULT CBaseImageParser::ResizeBitmap(
539528 return hr;
540529}
541530
531+ //
542532// CPPMImageParser
543-
533+ //
544534size_t CPPMImageParser::GetAllocationSize ()
545535{
546536 return m_uWidth * m_uHeight * 3 ;
@@ -579,7 +569,7 @@ HRESULT CPPMImageParser::PopulateBitmap(_In_ Bitmap* pBitmap)
579569 HRESULT hr = (m_uWidth * m_uHeight * 3 == m_uDataLen) ? S_OK : E_INVALIDARG;
580570 if (SUCCEEDED (hr))
581571 {
582- BYTE * pCurr = m_rgData;
572+ BYTE* pCurr = m_rgData;
583573 for (UINT row = 0 ; row < m_uHeight; row++)
584574 {
585575 for (UINT col = 0 ; col < m_uWidth; col++)
@@ -594,8 +584,9 @@ HRESULT CPPMImageParser::PopulateBitmap(_In_ Bitmap* pBitmap)
594584 return hr;
595585}
596586
587+ //
597588// CPGMImageParser
598-
589+ //
599590size_t CPGMImageParser::GetAllocationSize ()
600591{
601592 return m_uWidth * m_uHeight;
@@ -633,7 +624,7 @@ HRESULT CPGMImageParser::PopulateBitmap(_In_ Bitmap* pBitmap)
633624 HRESULT hr = (m_uWidth * m_uHeight == m_uDataLen) ? S_OK : E_INVALIDARG;
634625 if (SUCCEEDED (hr))
635626 {
636- BYTE * pCurr = m_rgData;
627+ BYTE* pCurr = m_rgData;
637628 for (UINT row = 0 ; row < m_uHeight; row++)
638629 {
639630 for (UINT col = 0 ; col < m_uWidth; col++)
@@ -648,9 +639,9 @@ HRESULT CPGMImageParser::PopulateBitmap(_In_ Bitmap* pBitmap)
648639 return hr;
649640}
650641
651-
642+ //
652643// CPBMImageParser
653-
644+ //
654645size_t CPBMImageParser::GetAllocationSize ()
655646{
656647 return m_uWidth * m_uHeight;
@@ -663,21 +654,7 @@ HRESULT CPBMImageParser::ReadImageHeaders()
663654 if (SUCCEEDED (hr))
664655 {
665656 // First get the portable image type
666- while (SUCCEEDED (hr) && m_imageType == PortableImageFormatType_Invalid)
667- {
668- // Verify type
669- UINT type = 0 ;
670- hr = ParseImageLineForNum (m_spStream, " P%u" , &type);
671- if (SUCCEEDED (hr))
672- {
673- hr = (type > PortableImageFormatType_Invalid && type < PortableImageFormatType_Count) ? S_OK : E_FAIL;
674- if (SUCCEEDED (hr))
675- {
676- m_imageType = static_cast <PortableImageFormatType>(type);
677- }
678- }
679- }
680-
657+ hr = ReadImageType (m_spStream, &m_imageType);
681658 if (SUCCEEDED (hr))
682659 {
683660 // Parse width and height. PBM images don't have a max value field
@@ -810,7 +787,7 @@ HRESULT CPBMImageParser::PopulateBitmap(_In_ Bitmap* pBitmap)
810787 HRESULT hr = (m_uWidth * m_uHeight == m_uDataLen) ? S_OK : E_INVALIDARG;
811788 if (SUCCEEDED (hr))
812789 {
813- BYTE * pCurr = m_rgData;
790+ BYTE* pCurr = m_rgData;
814791 for (UINT row = 0 ; row < m_uHeight; row++)
815792 {
816793 for (UINT col = 0 ; col < m_uWidth; col++)
0 commit comments