最近,我问了一个问题,并理解了答案,但无法将其转换为代码。经过一天的混乱,修复泄漏。但是,我从字面上看无法解决这个问题。
这稍有不同,我所要做的就是获取地图位图下的背景位图。
HDC hdc = GetDC(hWnd);
HDC hdcMem = CreateCompatibleDC(hdc);
HDC hdcMem2 = CreateCompatibleDC(hdc);
ReleaseDC(hWnd, hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, bitmap.hbmBackground);
BitBlt(buffer.getBufferDC(), 1, 1, WINDOW_WIDTH, WINDOW_HEIGHT, hdcMem, 0, 0, SRCCOPY);
HBITMAP hbmOld2 = (HBITMAP)SelectObject(hdcMem2, bitmap.hbmMap);
BitBlt(buffer.getBufferDC(), 1, 1, WINDOW_WIDTH, WINDOW_HEIGHT, hdcMem2, 0, 0, SRCPAINT);
SelectObject(hdcMem2, hbmOld2);
我的问题是结合起来...创建内存dc以保持栅格操作的结果。我根本无法解决这个问题,任何帮助都会很棒。
谢谢。
可能最困难的部分是中间的矩形。遮罩中的其他白色区域是背景应显示的位置,但是在该矩形内,您有白色不应该显示背景的位置。
目前,我将假设我们可以从不同颜色的部分开始。只要透明部分是唯一的,我们对透明部分(背景应该显示的部分)使用哪种颜色并不重要。现在,我假设它是254、254、254的RGB值-代码不会将其误认为纯白色(255、255、255),但通常在视觉上无法区分。
这样,工作就变得非常简单:我们可以使用TransparentBlt处理透明度,因此您可以使用BitBlt将背景蒙版到目标,然后使用TransparentBlt将蒙版蒙版到目标。简化一点(省去我们暂时不在意的参数),代码看起来像这样:
HDC mask, background, combined;
mask = CreateCompatibleDC(screen);
background = CreateCompatibleDC(screen);
combined = CreateCompatibleDC(screen);
HBITMAP mask_bmp = LoadBitmap(MAKEINTRESOURCE(IDB_MASK));
HBITMAP back_bmp = LoadBitmap(MAKEINTRESOURCE(IDB_BKGND));
HBITMAP result = CreateCompatibleBitmap(screen);
mask_original = Selectobject(mask, mask_bmp);
back_original = SelectObject(background, back_bmp);
combined_original = SelectObject(combined, result);
BitBlt(background, result, SRCCOPY);
TransparentBlt(mask, result, RGB(254, 254, 254));
BitBlt(result, screen, SRCCOPY);
SelectObject(mask, mask_original);
SelectObject(background, back_original);
SelectObject(combined, combined_original);
DeleteDC(mask);
DeleteDC(background);
DeleteDC(combined):
DeleteObject(result);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句