int width = subrect != NULL ? subrect->width : (int)rect.size.width;
int height = subrect != NULL ? subrect->height : (int)rect.size.height ;
- bytesPerRow = ( ( width * 8 * 4 + 7 ) / 8 );
-
- data = calloc( 1, bytesPerRow * height );
- context = CGBitmapContextCreate( data, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst );
+ wxBitmap bmp = wxBitmap(width, height, 32);
+
+ context = (CGContextRef)bmp.GetHBITMAP();
+
+ CGContextSaveGState(context);
+
+ CGContextTranslateCTM( context, 0, height );
+ CGContextScaleCTM( context, 1, -1 );
if ( subrect )
rect = CGRectOffset( rect, -subrect->x, -subrect->y ) ;
CGContextDrawImage( context, rect, image );
- unsigned char* buffer = (unsigned char*) data;
- wxBitmap bmp = wxBitmap(width, height, 32);
- wxAlphaPixelData pixData(bmp, wxPoint(0,0), wxSize(width, height));
-
- wxAlphaPixelData::Iterator p(pixData);
- for (int y=0; y<height; y++) {
- wxAlphaPixelData::Iterator rowStart = p;
- for (int x=0; x<width; x++) {
- unsigned char a = buffer[3];
- p.Red() = a; buffer++;
- p.Green() = a; buffer++;
- p.Blue() = a; buffer++;
- p.Alpha() = a; buffer++;
- ++p;
- }
- p = rowStart;
- p.OffsetY(pixData, 1);
- }
+ CGContextRestoreGState(context);
return bmp;
#endif