return image;
}
-void wxImage::SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b )
+long wxImage::XYToIndex(int x, int y) const
{
- wxCHECK_RET( Ok(), wxT("invalid image") );
+ if ( Ok() &&
+ x >= 0 && y >= 0 &&
+ x < M_IMGDATA->m_width && y < M_IMGDATA->m_height )
+ {
+ return y*M_IMGDATA->m_width + x;
+ }
- int w = M_IMGDATA->m_width;
- int h = M_IMGDATA->m_height;
+ return -1;
+}
- wxCHECK_RET( (x>=0) && (y>=0) && (x<w) && (y<h), wxT("invalid image index") );
+void wxImage::SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b )
+{
+ long pos = XYToIndex(x, y);
+ wxCHECK_RET( pos != -1, wxT("invalid image coordinates") );
- long pos = (y * w + x) * 3;
+ pos *= 3;
M_IMGDATA->m_data[ pos ] = r;
M_IMGDATA->m_data[ pos+1 ] = g;
unsigned char wxImage::GetRed( int x, int y ) const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid image") );
+ long pos = XYToIndex(x, y);
+ wxCHECK_MSG( pos != -1, 0, wxT("invalid image coordinates") );
- int w = M_IMGDATA->m_width;
- int h = M_IMGDATA->m_height;
-
- wxCHECK_MSG( (x>=0) && (y>=0) && (x<w) && (y<h), 0, wxT("invalid image index") );
-
- long pos = (y * w + x) * 3;
+ pos *= 3;
return M_IMGDATA->m_data[pos];
}
unsigned char wxImage::GetGreen( int x, int y ) const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid image") );
-
- int w = M_IMGDATA->m_width;
- int h = M_IMGDATA->m_height;
+ long pos = XYToIndex(x, y);
+ wxCHECK_MSG( pos != -1, 0, wxT("invalid image coordinates") );
- wxCHECK_MSG( (x>=0) && (y>=0) && (x<w) && (y<h), 0, wxT("invalid image index") );
-
- long pos = (y * w + x) * 3;
+ pos *= 3;
return M_IMGDATA->m_data[pos+1];
}
unsigned char wxImage::GetBlue( int x, int y ) const
{
- wxCHECK_MSG( Ok(), 0, wxT("invalid image") );
-
- int w = M_IMGDATA->m_width;
- int h = M_IMGDATA->m_height;
+ long pos = XYToIndex(x, y);
+ wxCHECK_MSG( pos != -1, 0, wxT("invalid image coordinates") );
- wxCHECK_MSG( (x>=0) && (y>=0) && (x<w) && (y<h), 0, wxT("invalid image index") );
-
- long pos = (y * w + x) * 3;
+ pos *= 3;
return M_IMGDATA->m_data[pos+2];
}
void wxImage::SetAlpha(int x, int y, unsigned char alpha)
{
- wxCHECK_RET( Ok() && HasAlpha(), wxT("invalid image or no alpha channel") );
-
- int w = M_IMGDATA->m_width,
- h = M_IMGDATA->m_height;
+ wxCHECK_RET( HasAlpha(), wxT("no alpha channel") );
- wxCHECK_RET( x >=0 && y >= 0 && x < w && y < h, wxT("invalid image index") );
+ long pos = XYToIndex(x, y);
+ wxCHECK_RET( pos != -1, wxT("invalid image coordinates") );
- M_IMGDATA->m_alpha[y*w + x] = alpha;
+ M_IMGDATA->m_alpha[pos] = alpha;
}
unsigned char wxImage::GetAlpha(int x, int y) const
{
- wxCHECK_MSG( Ok() && HasAlpha(), 0, wxT("invalid image or no alpha channel") );
+ wxCHECK_MSG( HasAlpha(), 0, wxT("no alpha channel") );
- int w = M_IMGDATA->m_width,
- h = M_IMGDATA->m_height;
+ long pos = XYToIndex(x, y);
+ wxCHECK_MSG( pos != -1, 0, wxT("invalid image coordinates") );
- wxCHECK_MSG( x >=0 && y >= 0 && x < w && y < h, 0, wxT("invalid image index") );
-
- return M_IMGDATA->m_alpha[y*w + x];
+ return M_IMGDATA->m_alpha[pos];
}
-bool wxImage::ConvertColourToAlpha( unsigned char r, unsigned char g, unsigned char b )
+bool
+wxImage::ConvertColourToAlpha(unsigned char r, unsigned char g, unsigned char b)
{
- SetAlpha( NULL );
+ SetAlpha(NULL);
- int w = M_IMGDATA->m_width,
- h = M_IMGDATA->m_height;
+ const int w = M_IMGDATA->m_width;
+ const int h = M_IMGDATA->m_height;
unsigned char *alpha = GetAlpha();
unsigned char *data = GetData();
- int x,y;
- for (y = 0; y < h; y++)
- for (x = 0; x < w; x++)
- {
- *alpha = *data;
- alpha++;
- *data = r;
- data++;
- *data = g;
- data++;
- *data = b;
- data++;
- }
+ for ( int y = 0; y < h; y++ )
+ {
+ for ( int x = 0; x < w; x++ )
+ {
+ *alpha++ = *data;
+ *data++ = r;
+ *data++ = g;
+ *data++ = b;
+ }
+ }
return true;
}
free(M_IMGDATA->m_alpha);
M_IMGDATA->m_alpha = alpha;
M_IMGDATA->m_static = static_data;
-
}
unsigned char *wxImage::GetAlpha() const