gpt4 book ai didi

c++ - Win32 C++ Alphablend 位图部分透明

转载 作者:行者123 更新时间:2023-11-28 07:05:09 24 4
gpt4 key购买 nike

我用谷歌搜索、查看示例、此处的其他问题、MSDN 和下载的示例代码。我不知道这有什么问题。

// setting up the memory DC and selecting in the bitmap
HDC hdc = GetDC(hWnd);
HDC hdcMem = CreateCompatibleDC(hdc);
ReleaseDC(hWnd, hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, bitmap.hbmLogo);

// setting up the blend function
BLENDFUNCTION bStruct;
bStruct.BlendOp = AC_SRC_OVER;
bStruct.BlendFlags = 0;
bStruct.SourceConstantAlpha = 255;
bStruct.AlphaFormat = AC_SRC_ALPHA;

// try
BOOL check = AlphaBlend(buffer.getBufferDC(), 0, 0, bitmap.bmLogo.bmWidth, bitmap.bmLogo.bmHeight, hdcMem, 0, 0, bitmap.bmLogo.bmWidth, bitmap.bmLogo.bmHeight, bStruct);
if (check == FALSE) MessageBox(0,0,0,0);

// this is how I load the bitmap, it is a resource.
bitmap.hbmLogo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_LOGO_0));
if (bitmap.hbmLogo == NULL) { MessageBox(NULL, "Could not read the logo bitmap.", "Error", MB_OK); return false; }
GetObject(bitmap.hbmLogo, sizeof(bitmap.bmLogo), &bitmap.bmLogo);

我使用消息框来快速检查结果。检查总是返回 TRUE。位图及其尺寸正确。

我已经尝试过不同的背景颜色、alpha 值,但仍然没有,用 BitBlt 或 TransparentBitBlt 替换它,没问题, Logo 显示。我对 AlphaBlend 函数的所有尝试都没有产生任何变化。 Logo 不会出现在屏幕上,哪怕是一秒钟。

有什么想法吗?

谢谢。

Here is the bitmap.

最佳答案

仔细查看示例后找到解决方案。

我将 BLENDFUNCTION 设置为全局的,并且在我使用的 WM_CREATE 消息中:

    m_bf.BlendOp = AC_SRC_OVER;
m_bf.BlendFlags = 0;
m_bf.SourceConstantAlpha = 100; // any 0 to 255
m_bf.AlphaFormat = 0;
LoadBitmapsFromResource();

它现在正在运行。

关于c++ - Win32 C++ Alphablend 位图部分透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21871411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com