Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- HBITMAP OpenGX::ImageStack::RenderToBitmap( void ) const {
- HBITMAP ret;
- Gdiplus::Bitmap *Result = new Gdiplus::Bitmap( ( int )_screen.width, ( int )_screen.height, PixelFormat32bppARGB );
- Gdiplus::BitmapData info = Gdiplus::BitmapData();
- Result->LockBits( new Gdiplus::Rect( 0, 0, ( int )_screen.width, ( int )_screen.height ), ( Gdiplus::ImageLockModeRead | Gdiplus::ImageLockModeWrite ), PixelFormat32bppARGB, &info );
- byte Balpha, Svalue;
- byte *assignment;
- float Salphaf;
- OpenGX::Image *Bimage;
- int Width, Height, Line, i, x, y, y_offset, x_border, y_max, x_max;
- OpenGX::Pixel BPixel, SPixel;
- OpenGX::Pixel *ptr, *baseptr;
- OpenGX::PointI Boffset;
- OpenGX::RectangleI BArea;
- ptr = ( OpenGX::Pixel* )info.Scan0;
- baseptr = ( OpenGX::Pixel* )info.Scan0;
- Width = ( int )_screen.width;
- Height = ( int )_screen.height;
- Line = info.Stride / 4;
- for( i = nEntries - 1; i >= 0; i-- ) {
- Bimage = _base[ i ];
- Boffset = offset[ i ];
- BArea = OpenGX::RectangleI( Boffset.x,
- Boffset.y,
- Boffset.x + Bimage->width > Width ? Width - Boffset.x : ( int )Bimage->width,
- Boffset.y + Bimage->height > Height ? Height - Boffset.y : ( int )Bimage->height );
- x_border = 0 > BArea.x ? 0 : BArea.x;
- y_max = BArea.y + BArea.height;
- x_max = BArea.x + BArea.width;
- for( y = ( 0 > BArea.y ? 0 : BArea.y ); y < y_max; y++ ) {
- y_offset = y - BArea.y;
- ptr = baseptr + y * Line + x_border;
- for( x = x_border; x < x_max; x++ ) {
- if( ptr->a != 0xFF ) {
- BPixel = Bimage->pixels[ x - BArea.x ][ y_offset ];
- if( ptr->a == 0x00 ) {
- *ptr++ = BPixel;
- } else if( BPixel.a != 0x00 ) {
- Salphaf = ( float )ptr->a / 255;
- Balpha = BPixel.a;
- Svalue = SPixel.b;
- assignment = ( byte* )ptr;
- *assignment = ( byte )( Svalue + Salphaf * ( *assignment - Svalue ) );
- Svalue = SPixel.g;
- assignment++;
- *assignment = ( byte )( Svalue + Salphaf * ( *assignment - Svalue ) );
- Svalue = SPixel.r;
- assignment++;
- *assignment = ( byte )( Svalue + Salphaf * ( *assignment - Svalue ) );
- assignment++;
- *assignment = Balpha > *assignment ? Balpha : *assignment;
- ptr++;
- } else {
- ptr++;
- }
- } else {
- ptr++;
- }
- }
- }
- }
- Result->UnlockBits( &info );
- Result->GetHBITMAP( Gdiplus::Color( 0, 0, 0, 0 ), &ret );
- delete Bimage;
- delete Result;
- return ret;
- }
Add Comment
Please, Sign In to add comment