X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e7003166c3bf8f8cbca313addc9d07fa7c21f484..44c4a3348693414bace13852e50d926c1aa9f08b:/src/msw/bitmap.cpp diff --git a/src/msw/bitmap.cpp b/src/msw/bitmap.cpp index cbb71c3f2e..264bb3359e 100644 --- a/src/msw/bitmap.cpp +++ b/src/msw/bitmap.cpp @@ -30,7 +30,6 @@ #include "wx/bitmap.h" #include "wx/icon.h" #endif -#include "wx/image.h" #include "wx/msw/private.h" #include "wx/log.h" @@ -77,7 +76,7 @@ wxBitmapRefData::~wxBitmapRefData(void) m_hBitmap = 0 ; if (m_bitmapMask) -// delete m_bitmapMask; // this line cause an exception + delete m_bitmapMask; m_bitmapMask = NULL; } @@ -943,230 +942,3 @@ static long freeDIB(LPBITMAPINFO lpDIBHeader) } -//----------------------------------------------------------------------------- -// also implemented here from wxImage -//----------------------------------------------------------------------------- - -/* -class wxImage : wxGDIObject -{ - wxImage( const wxBitmap &bitmap ); - wxBitmap ConvertToBitmap() const; -} -*/ - - -wxBitmap wxImage::ConvertToBitmap() const -{ - - wxBitmap bitmap; - wxCHECK_MSG( Ok(), bitmap, "invalid image" ); - int width = GetWidth(); - int height = GetHeight(); - bitmap.SetWidth( width ); - bitmap.SetHeight( height ); - bitmap.SetDepth( wxDisplayDepth() ); - - int headersize = sizeof(BITMAPINFOHEADER); - LPBITMAPINFO lpDIBh = (BITMAPINFO *) malloc( headersize ); - wxCHECK_MSG( lpDIBh, bitmap, "could not allocate memory for DIB header" ); - -// Fill in the DIB header - lpDIBh->bmiHeader.biSize = headersize; - lpDIBh->bmiHeader.biWidth = width; - lpDIBh->bmiHeader.biHeight = -height; - lpDIBh->bmiHeader.biSizeImage = width * height * 3; - - lpDIBh->bmiHeader.biPlanes = 1; - lpDIBh->bmiHeader.biBitCount = 24; - lpDIBh->bmiHeader.biCompression = BI_RGB; - lpDIBh->bmiHeader.biClrUsed = 0; - -// These seem not needed for our purpose here. -// lpDIBh->bmiHeader.biClrImportant = 0; -// lpDIBh->bmiHeader.biXPelsPerMeter = 0; -// lpDIBh->bmiHeader.biYPelsPerMeter = 0; - - unsigned char *lpBits = (unsigned char *) malloc( width*height*3 ); - if( !lpBits ) - { - wxFAIL_MSG( "could not allocate memory for DIB" ); - free( lpDIBh ); - return bitmap; - } - - unsigned char *data = GetData(); - - unsigned char *ptdata = data, *ptbits = lpBits; - for( int i=0; ibmiHeader), CBM_INIT, lpBits, lpDIBh, DIB_RGB_COLORS ); - -// The above line is equivalent to the following two lines. -// hbitmap = ::CreateCompatibleBitmap( hdc, width, height ); -// ::SetDIBits( hdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS); -// or the following lines -// hbitmap = ::CreateCompatibleBitmap( hdc, width, height ); -// HDC memdc = ::CreateCompatibleDC( hdc ); -// ::SelectObject( memdc, hbitmap); -// ::SetDIBitsToDevice( memdc, 0, 0, width, height,\ -// 0, 0, 0, height, (void *)lpBits, lpDIBh, DIB_RGB_COLORS); -// ::SelectObject( memdc, 0 ); -// ::DeleteDC( memdc ); - - bitmap.SetHBITMAP( (WXHBITMAP) hbitmap ); - - if( HasMask() ) - { - unsigned char r = GetMaskRed(); - unsigned char g = GetMaskGreen(); - unsigned char b = GetMaskBlue(); - unsigned char zero = 0, one = 255; - ptdata = data; - ptbits = lpBits; - for( int i=0; ibmiHeader.biSize = headersize; - lpDIBh->bmiHeader.biWidth = width; - lpDIBh->bmiHeader.biHeight = -height; - lpDIBh->bmiHeader.biSizeImage = width * height * 3; - - lpDIBh->bmiHeader.biPlanes = 1; - lpDIBh->bmiHeader.biBitCount = 24; - lpDIBh->bmiHeader.biCompression = BI_RGB; - lpDIBh->bmiHeader.biClrUsed = 0; - -// These seem not needed for our purpose here. -// lpDIBh->bmiHeader.biClrImportant = 0; -// lpDIBh->bmiHeader.biXPelsPerMeter = 0; -// lpDIBh->bmiHeader.biYPelsPerMeter = 0; - - unsigned char *lpBits = (unsigned char *) malloc( width*height*3 ); - if( !lpBits ) - { - wxFAIL_MSG( "could not allocate data for DIB" ); - free( data ); - free( lpDIBh ); - return; - } - - HBITMAP hbitmap; - hbitmap = (HBITMAP) bitmap.GetHBITMAP(); - HDC hdc = ::GetDC(NULL); - ::GetDIBits( hdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS ); - - unsigned char *ptdata = data, *ptbits = lpBits; - for( int i=0; iGetMaskBitmap() ) - { - hbitmap = (HBITMAP) bitmap.GetMask()->GetMaskBitmap(); - HDC memdc = ::CreateCompatibleDC( hdc ); - ::SetTextColor( memdc, RGB( 0, 0, 0 ) ); - ::SetBkColor( memdc, RGB( 255, 255, 255 ) ); - ::GetDIBits( memdc, hbitmap, 0, height, lpBits, lpDIBh, DIB_RGB_COLORS ); - ::DeleteDC( memdc ); - unsigned char r=16, g=16, b=16; // background set to RGB(16,16,16) - ptdata = data; - ptbits = lpBits; - for( int i=0; i