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:
@@ -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__
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user