- if ( image->HasAlpha() )
- {
- data[index + 3] = image->GetAlpha(x, y);
- }
- else if ( (data[index + 0] != image->GetMaskRed())
- || (data[index + 1] != image->GetMaskGreen())
- || (data[index + 2] != image->GetMaskBlue()) )
- {
- data[index + 3] = 255;
- }
- else
+ default:
+ wxFAIL_MSG( _T("unknown wxPNG_TYPE_XXX") );
+ // fall through
+
+ case wxPNG_TYPE_COLOUR:
+ *pData++ = uchRed;
+ if ( iBitDepth == 16 )
+ *pData++ = 0;
+ *pData++ = uchGreen;
+ if ( iBitDepth == 16 )
+ *pData++ = 0;
+ *pData++ = uchBlue;
+ if ( iBitDepth == 16 )
+ *pData++ = 0;
+ break;
+
+ case wxPNG_TYPE_GREY:
+ {
+ // where do these coefficients come from? maybe we
+ // should have image options for them as well?
+ unsigned uiColor =
+ (unsigned) (76.544*(unsigned)uchRed +
+ 150.272*(unsigned)uchGreen +
+ 36.864*(unsigned)uchBlue);
+
+ *pData++ = (unsigned char)((uiColor >> 8) & 0xFF);
+ if ( iBitDepth == 16 )
+ *pData++ = (unsigned char)(uiColor & 0xFF);
+ }
+ break;
+
+ case wxPNG_TYPE_GREY_RED:
+ *pData++ = uchRed;
+ if ( iBitDepth == 16 )
+ *pData++ = 0;
+ break;
+ }
+
+ if ( bUseAlpha )
+ {
+ unsigned char uchAlpha = 255;
+ if ( bHasAlpha )
+ uchAlpha = *pAlpha++;
+
+ if ( bHasMask )