/[winpt]/trunk/PTD/wptJPG.cpp
ViewVC logotype

Diff of /trunk/PTD/wptJPG.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 23 by twoaday, Fri Sep 30 10:10:16 2005 UTC
# Line 42  Line 42 
42  #define HIMETRIC_INCH 2540  #define HIMETRIC_INCH 2540
43  #define ERROR_TITLE "CJPG Error" /* Error Title (Related To This Class)...*/  #define ERROR_TITLE "CJPG Error" /* Error Title (Related To This Class)...*/
44    
45    #define out_of_core() do { \
46            MessageBox (NULL, "Can not allocate memory", ERROR_TITLE, MB_OK|MB_ICONSTOP); \
47            return FALSE; \
48        } while (1)
49    
50  CJPG::CJPG ()  
51    CJPG::CJPG (void)
52  {  {
53      m_IPicture = NULL;      m_IPicture = NULL;
54      m_Height = 0;      m_Height = 0;
# Line 52  CJPG::CJPG () Line 57  CJPG::CJPG ()
57  }  }
58    
59    
60  CJPG::~CJPG ()  CJPG::~CJPG (void)
61  {  {
62      if (m_IPicture != NULL)      if (m_IPicture != NULL)
63          FreePictureData ();          FreePictureData ();
# Line 60  CJPG::~CJPG () Line 65  CJPG::~CJPG ()
65    
66    
67    
68  /* Free The Allocated Memory That Holdes The IPicture Interface Data  /* Free the allocated memory that holdes the IPicture Interface data
69     And Clear Picture Information. */     and clear picture information. */
70  void CJPG::FreePictureData()  void
71    CJPG::FreePictureData (void)
72  {  {
73      if (m_IPicture != NULL) {      if (m_IPicture != NULL) {
74          m_IPicture->Release();          m_IPicture->Release();
# Line 75  void CJPG::FreePictureData() Line 81  void CJPG::FreePictureData()
81    
82    
83  /* Open a JPG File And Load It Into IPicture (Interface) */  /* Open a JPG File And Load It Into IPicture (Interface) */
84  BOOL CJPG::Load(LPCSTR sFilePathName)  BOOL
85    CJPG::Load (LPCSTR sFilePathName)
86  {  {
87      BOOL bResult = FALSE;      BOOL bResult = FALSE;
88      FILE * f;      FILE * f;
# Line 89  BOOL CJPG::Load(LPCSTR sFilePathName) Line 96  BOOL CJPG::Load(LPCSTR sFilePathName)
96          struct stat st;          struct stat st;
97          fstat (fileno (f), &st);          fstat (fileno (f), &st);
98          nSize = st.st_size;          nSize = st.st_size;
99          BYTE* pBuffer = new BYTE[nSize];          BYTE *pBuffer = new BYTE[nSize];
100            if  (!pBuffer) {
101                fclose (f);
102                out_of_core ();
103            }
104            memset (pBuffer, 0, nSize);
105          if (fread(pBuffer, 1, nSize, f) > 0) {          if (fread(pBuffer, 1, nSize, f) > 0) {
106              if (LoadPictureData (pBuffer, nSize))              if (LoadPictureData (pBuffer, nSize))
107                  bResult = TRUE;                  bResult = TRUE;
# Line 97  BOOL CJPG::Load(LPCSTR sFilePathName) Line 109  BOOL CJPG::Load(LPCSTR sFilePathName)
109          fclose (f);          fclose (f);
110          delete [] pBuffer;          delete [] pBuffer;
111      }      }
112      else { /* Open Failed... */      else {
113          MessageBox (NULL, strerror (errno), ERROR_TITLE, MB_OK | MB_ICONSTOP);          MessageBox (NULL, strerror (errno), ERROR_TITLE, MB_OK|MB_ICONSTOP);
114          bResult = FALSE;                  bResult = FALSE;
115      }      }
116    
117      m_Weight = nSize; /* Update Picture Size Info... */      m_Weight = nSize; /* Update Picture Size Info... */
118    
119      if(m_IPicture != NULL) { /* Do Not Try To Read From Memory That Is Not Exist... */      if(m_IPicture != NULL) {
120          m_IPicture->get_Height (&m_Height);          m_IPicture->get_Height (&m_Height);
121          m_IPicture->get_Width (&m_Width);          m_IPicture->get_Width (&m_Width);
122          /* Calculate Its Size On a "Standard" (96 DPI) Device Context */          /* Calculate Its Size On a "Standard" (96 DPI) Device Context */
123          m_Height = MulDiv (m_Height, 96, HIMETRIC_INCH);          m_Height = MulDiv (m_Height, 96, HIMETRIC_INCH);
124          m_Width  = MulDiv (m_Width,  96, HIMETRIC_INCH);                  m_Width  = MulDiv (m_Width,  96, HIMETRIC_INCH);        
125      }      }
126      else { /* Picture Data Is Not a Known Picture Type */      else {
127            /* Picture data is not a known picture type */
128          m_Height = 0;          m_Height = 0;
129          m_Width = 0;          m_Width = 0;
130          bResult = FALSE;                  bResult = FALSE;        
131      }      }
132      return (bResult);      return bResult;
133  }  }
134    
135    
136    
137  /* Read The Picture Data From a Source (File / Resource)  /* read the picture data from a source (file / resource)
138     And Load It Into The Current IPicture Object In Use */     and load it into the current IPicture object in use */
139  BOOL CJPG::LoadPictureData (BYTE *pBuffer, int nSize)  BOOL
140    CJPG::LoadPictureData (BYTE *pBuffer, int nSize)
141    
142  {  {
143      BOOL bResult = FALSE;      BOOL bResult = FALSE;
# Line 133  BOOL CJPG::LoadPictureData (BYTE *pBuffe Line 147  BOOL CJPG::LoadPictureData (BYTE *pBuffe
147            
148      hGlobal = GlobalAlloc (GMEM_MOVEABLE, nSize);      hGlobal = GlobalAlloc (GMEM_MOVEABLE, nSize);
149      if (hGlobal == NULL) {      if (hGlobal == NULL) {
150          MessageBox (NULL, "Can not allocate enough memory", ERROR_TITLE, MB_OK | MB_ICONSTOP);          out_of_core ();
151          return (FALSE);          return FALSE;
152      }      }
153    
154      pData = GlobalLock (hGlobal);      pData = GlobalLock (hGlobal);
# Line 143  BOOL CJPG::LoadPictureData (BYTE *pBuffe Line 157  BOOL CJPG::LoadPictureData (BYTE *pBuffe
157    
158      if (CreateStreamOnHGlobal (hGlobal, TRUE, &pStream) == S_OK) {      if (CreateStreamOnHGlobal (hGlobal, TRUE, &pStream) == S_OK) {
159          HRESULT hr;          HRESULT hr;
160          if ((hr = OleLoadPicture (pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_IPicture)) == E_NOINTERFACE) {          hr = OleLoadPicture (pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_IPicture);
161              MessageBox (NULL, "IPicture interface is not supported\t", ERROR_TITLE, MB_OK | MB_ICONSTOP);          if (hr == E_NOINTERFACE) {
162              return(FALSE);              MessageBox (NULL, "IPicture interface is not supported", ERROR_TITLE, MB_OK|MB_ICONSTOP);
163                return FALSE;
164          }          }
165          else { // S_OK          else { /* S_OK */
166              pStream->Release ();              pStream->Release ();
167              pStream = NULL;              pStream = NULL;
168              bResult = TRUE;              bResult = TRUE;
# Line 159  BOOL CJPG::LoadPictureData (BYTE *pBuffe Line 174  BOOL CJPG::LoadPictureData (BYTE *pBuffe
174  }  }
175    
176    
177  /* Draw The Loaded Picture Direct To The Client DC */  /* Draw the loaded picture direct to the client DC */
178  BOOL CJPG::Show (HDC pDC, POINT *LeftTop, POINT *WidthHeight, int MagnifyX, int MagnifyY)  BOOL
179    CJPG::Show (HDC pDC, POINT *LeftTop, POINT *WidthHeight,
180                int MagnifyX, int MagnifyY)
181    
182  {  {
     if (pDC == NULL || m_IPicture == NULL)  
         return FALSE;  
       
183      long Width  = 0;      long Width  = 0;
184      long Height = 0;      long Height = 0;
185    
186        if (pDC == NULL || m_IPicture == NULL)
187            return FALSE;
188    
189      m_IPicture->get_Width (&Width);      m_IPicture->get_Width (&Width);
190      m_IPicture->get_Height (&Height);      m_IPicture->get_Height (&Height);
191                    
# Line 200  BOOL CJPG::Show (HDC pDC, POINT *LeftTop Line 218  BOOL CJPG::Show (HDC pDC, POINT *LeftTop
218      if (SUCCEEDED (hrP))      if (SUCCEEDED (hrP))
219          return (TRUE);          return (TRUE);
220    
221      MessageBox (NULL, "Can not allocate enough memory", ERROR_TITLE, MB_OK | MB_ICONSTOP);      out_of_core ();
     return (FALSE);  
222  }  }
223    
224    
225  /* Get The Original Picture Pixel Size (Ignor What Current DC Is Using)  /* Get the original picture pixel size (ignore what current DC is using)
226     Pointer To a Device Context Is Needed For Pixel Calculation, */     pointer to a Device Context is needed for pixel calculation, */
227  BOOL CJPG::UpdateSizeOnDC(HDC pDC)  BOOL
228    CJPG::UpdateSizeOnDC (HDC pDC)
229    
230  {        {      
231      if(pDC == NULL || m_IPicture == NULL) {      if(pDC == NULL || m_IPicture == NULL) {
# Line 219  BOOL CJPG::UpdateSizeOnDC(HDC pDC) Line 237  BOOL CJPG::UpdateSizeOnDC(HDC pDC)
237      m_IPicture->get_Height (&m_Height);      m_IPicture->get_Height (&m_Height);
238      m_IPicture->get_Width (&m_Width);      m_IPicture->get_Width (&m_Width);
239    
240      // Get Current DPI - Dot Per Inch      /* Get Current DPI - Dot Per Inch */
241      int CurrentDPI_X = GetDeviceCaps (pDC, LOGPIXELSX);      int CurrentDPI_X = GetDeviceCaps (pDC, LOGPIXELSX);
242      int CurrentDPI_Y = GetDeviceCaps (pDC, LOGPIXELSY);      int CurrentDPI_Y = GetDeviceCaps (pDC, LOGPIXELSY);
243    
# Line 228  BOOL CJPG::UpdateSizeOnDC(HDC pDC) Line 246  BOOL CJPG::UpdateSizeOnDC(HDC pDC)
246    
247      return (TRUE);      return (TRUE);
248  }  }
   
   
 int  
 PTD_jpg_show (HWND hwnd, POINT *p, LPCSTR name)  
 {  
     CJPG jpg;  
     HDC hdc;  
     POINT p2;  
     BOOL rc;  
   
     rc = jpg.Load (name);  
     if (!rc)  
         return -1;  
     hdc = GetWindowDC (hwnd);  
     rc = jpg.UpdateSizeOnDC (hdc);  
     if (!rc) {  
         ReleaseDC (hwnd, hdc);  
         return -2;  
     }  
   
     p2.x = jpg.m_Width;  
     p2.y = jpg.m_Height;  
     rc = jpg.Show (hdc, p, &p2, 0, 0);  
   
     ReleaseDC (hwnd, hdc);  
     jpg.FreePictureData ();  
     return rc;  
 }  

Legend:
Removed from v.2  
changed lines
  Added in v.23

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26