Details
Most of the work was in taking the original
CXImage library
and modifying it to make it compile on the
PocketPC
(Using eVC 3.0) This required a few
#define
changes and
#ifdef
out
any
try...catch
code. I opted to return
false
.
The next step was debugging the
PNG code.
Since the PNG library
uses function pointers, it turns out that eVC
modifies the signature between a debug and
release build. The stack becomes corrupt upon
return unless the signature for these functions
are modified as below:
Collapse |
Copy
Code
#if defined (_WIN32_WCE) && !defined (_DEBUG)
#define _CDECL_MODE_ __cdecl
#else
#define _CDECL_MODE_
#endif
static void _CDECL_MODE_ user_write_data(png_structp png_ptr,
png_bytep data,
png_size_t length)
Finally, I modified DibSectionLite to include:
- All the suggested fixes posted on
UCanCode (including 16, 24 bit images)
- Cropping. I have a floorplan image I
need to pan around on the screen, cropping
is quite fast when displaying only a portion
of the image.
- Original
Load
and
Save
now
take a CFile
or CString
..
Useful for memory images (CMemFile
)
- Loading images via
CXImage
.
You can add support and shrink/expand you
executable size based on these defines as well
as the ones in
CXImage
:
Collapse |
Copy
Code
#define DIBSECTION_SUPPORT_BMP 1
#define DIBSECTION_SUPPORT_GIF 1 #define DIBSECTION_SUPPORT_JPG 1
#define DIBSECTION_SUPPORT_PNG 1
#define DIBSECTION_SUPPORT_ICO 1
#define DIBSECTION_SUPPORT_TGA 1
#define DIBSECTION_SUPPORT_PCX 1
#define DIBSECTION_SUPPORT_JBG 1
New methods for loading are as follows:
Collapse |
Copy
Code
BOOL LoadPNG(LPCTSTR lpszFileName);
BOOL LoadJPG(LPCTSTR lpszFileName);
BOOL LoadBMP(LPCTSTR lpszFileName);
BOOL LoadGIF(LPCTSTR lpszFileName);
BOOL LoadMNG(LPCTSTR lpszFileName);
BOOL LoadICO(LPCTSTR lpszFileName);
BOOL LoadTIF(LPCTSTR lpszFileName);
BOOL LoadTGA(LPCTSTR lpszFileName);
BOOL LoadPCX(LPCTSTR lpszFileName);
BOOL LoadWBMP(LPCTSTR lpszFileName);
BOOL LoadWMF(LPCTSTR lpszFileName);
BOOL LoadJ2K(LPCTSTR lpszFileName);
BOOL LoadJBG(LPCTSTR lpszFileName);
The code unravels and builds as a bunch of .LIB
You can compile and build the PocketPCTest
app for your device. It is nothing fancy. Simply
an exerciser. Uncomment the line in
PocketPCTestView.cpp as needed.
The test app includes a definition of:
Collapse |
Copy
Code
CDIBSectionLite m_image;
in the header.
To Draw:
Collapse |
Copy
Code
void CPocketPCTestView::OnDraw(CDC* pDC)
{
CPocketPCTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
m_image.Draw(pDC, CPoint(0,0));
}
And to load:
Collapse |
Copy
Code
CPocketPCTestView::CPocketPCTestView()
{
m_image.LoadPNG(_T("\\test.png"));
}
That's about it. I didn't really spend much time
with making J2K, TIF, and WBMP work. I'll update
the article if someone gets them working.