Я отображаю растровое изображение, используя GDI +. После загрузки растрового изображения из ресурса DLL я установил прозрачный цвет фона (синий - # 0000FF) с помощью TransparentBlt. В Windows Vista и более поздних версиях это работает должным образом.
Однако в системе Windows XP, которую мы тестируем, это работает, только когда отображается какая-либо подсказка (например, свойство title в IE или подсказка проводника Windows, отображаемая при наведении курсора мыши на файл и т. Д.). В остальное время цвет фона остается синим.
Кто-нибудь сталкивался с этим раньше или знает, как это остановить и как правильно сделать прозрачным синий?
Редактировать: После дальнейшего изучения я обнаружил, что установка глубины цвета в Windows XP на 16-битные цвета вместо 32-битных цветов заставляет TransparentBlt снова нормально работать. Очевидно, что это не идеальное решение, указывающее, какую глубину цвета следует использовать, но дает ли это какой-либо намек на то, что может происходить?
Edit2: пример кода включен.
m_pGDIBitmap = new Gdiplus::Bitmap(_Module.m_hInst, MAKEINTRESOURCE(lImageResource));
m_hMemDC = CreateCompatibleDC(hdc);
Gdiplus::Graphics myGraphics(m_hMemDC);
myGraphics.DrawImage(m_pGDIBitmap,
Gdiplus::Rect(0, 0, m_pGDIBitmap->GetWidth(), m_pGDIBitmap->GetHeight()),
0,
0,
m_pGDIBitmap->GetWidth(),
m_pGDIBitmap->GetHeight(),
Gdiplus::UnitPixel, &imAtt);
SetStretchBltMode(hdc, HALFTONE);
SetBrushOrgEx(hdc, rcBounds.left, rcBounds.top, NULL);
TransparentBlt(hdc, rcBounds.left, rcBounds.top, iScaledWidth, iScaledHeight, m_hMemDC, 0, 0, iBitmapWidth, iBitmapHeight, GetPixel(m_hMemDC, 0, 0));