Fix for wxClientDC::GetAsBitmap, which partially resolves ticket #9486
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@53742 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -209,38 +209,23 @@ wxBitmap wxWindowDC::DoGetAsBitmap(const wxRect *subrect) const
|
|||||||
|
|
||||||
HIViewCreateOffscreenImage( handle, 0, &rect, &image);
|
HIViewCreateOffscreenImage( handle, 0, &rect, &image);
|
||||||
|
|
||||||
|
|
||||||
int width = subrect != NULL ? subrect->width : (int)rect.size.width;
|
int width = subrect != NULL ? subrect->width : (int)rect.size.width;
|
||||||
int height = subrect != NULL ? subrect->height : (int)rect.size.height ;
|
int height = subrect != NULL ? subrect->height : (int)rect.size.height ;
|
||||||
|
|
||||||
bytesPerRow = ( ( width * 8 * 4 + 7 ) / 8 );
|
wxBitmap bmp = wxBitmap(width, height, 32);
|
||||||
|
|
||||||
data = calloc( 1, bytesPerRow * height );
|
context = (CGContextRef)bmp.GetHBITMAP();
|
||||||
context = CGBitmapContextCreate( data, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst );
|
|
||||||
|
CGContextSaveGState(context);
|
||||||
|
|
||||||
|
CGContextTranslateCTM( context, 0, height );
|
||||||
|
CGContextScaleCTM( context, 1, -1 );
|
||||||
|
|
||||||
if ( subrect )
|
if ( subrect )
|
||||||
rect = CGRectOffset( rect, -subrect->x, -subrect->y ) ;
|
rect = CGRectOffset( rect, -subrect->x, -subrect->y ) ;
|
||||||
CGContextDrawImage( context, rect, image );
|
CGContextDrawImage( context, rect, image );
|
||||||
|
|
||||||
unsigned char* buffer = (unsigned char*) data;
|
CGContextRestoreGState(context);
|
||||||
wxBitmap bmp = wxBitmap(width, height, 32);
|
|
||||||
wxAlphaPixelData pixData(bmp, wxPoint(0,0), wxSize(width, height));
|
|
||||||
|
|
||||||
pixData.UseAlpha();
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return bmp;
|
return bmp;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user