create masks even (slightly) faster

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13171 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-12-23 11:47:22 +00:00
parent 016105291a
commit 59ff46cb36

View File

@@ -1292,47 +1292,14 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
ok = FALSE; ok = FALSE;
} }
// VZ: I'm leaving the old code in for now in case it is needed under Win95 if ( ok )
// or any other broken Windows versions but it is horribly inefficient:
// creating 100 masks for 80x80 bitmaps takes 7.8 seconds on my machine
// but only 0.2 using the new code!
#if 0
// this is not very efficient, but I can't think of a better way of doing
// it
for ( int w = 0; ok && (w < width); w++ )
{ {
for ( int h = 0; ok && (h < height); h++ ) // this will create a monochrome bitmap with 0 points for the pixels
{ // which have the same value as the background colour and 1 for the
COLORREF col = GetPixel(srcDC, w, h); // others
if ( col == CLR_INVALID ) ::SetBkColor(srcDC, maskColour);
{ ::BitBlt(destDC, 0, 0, width, height, srcDC, 0, 0, NOTSRCCOPY);
wxLogLastError(wxT("GetPixel"));
// doesn't make sense to continue
ok = FALSE;
break;
}
if ( col == maskColour )
{
::SetPixel(destDC, w, h, RGB(0, 0, 0));
}
else
{
::SetPixel(destDC, w, h, RGB(255, 255, 255));
}
}
} }
#else
HBRUSH hbrMask = ::CreateSolidBrush(maskColour);
HGDIOBJ hbrOld = ::SelectObject(destDC, hbrMask);
// the ternary raster operation 0x3C004A is dest := src ^ brush
::BitBlt(destDC, 0, 0, width, height, srcDC, 0, 0, 0x3C004A);
::SelectObject(destDC, hbrOld);
#endif
::SelectObject(srcDC, hbmpSrcOld); ::SelectObject(srcDC, hbmpSrcOld);
::DeleteDC(srcDC); ::DeleteDC(srcDC);
@@ -1340,9 +1307,9 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
::DeleteDC(destDC); ::DeleteDC(destDC);
return ok; return ok;
#else #else // __WXMICROWIN__
return FALSE; return FALSE;
#endif #endif // __WXMICROWIN__/!__WXMICROWIN__
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------