gpt4 book ai didi

c++ - 适当结合StretchBlt和TransparentBlt,可以正确创建透明位图

转载 作者:可可西里 更新时间:2023-11-01 18:39:39 24 4
gpt4 key购买 nike

简介及相关信息:

最近,我在 SO 中提出了一个关于正确缩放位图的问题,以便保持图片的质量:

Bitmap loses quality when stretched/shrinked on buttons background .

我尝试采纳评论中的建议,使用 `StretchBlt,所以我制作了一个小的演示程序。

在我将拉伸(stretch)模式设置为 BLACKONWHITE 后,它确实提高了位图的清晰度。

我想尝试使位图的某些颜色(例如黑色)透明。

以前用过TransparentBlt,现在不知道怎么用

问题:

为了保持画面的清晰度,我需要在内存DC中StretchBlt,拉伸(stretch)模式为BLACKONWHITE

问题是我不知道如何Blt它透明地进入主窗口的DC。

这是演示应用程序的代码片段:

    case WM_PAINT:
{
// main window's DC

hdc = BeginPaint(hWnd, &ps);

// main window's client rectangle

RECT r;

GetClientRect( hWnd, &r );

// memory DC for double buffering

HDC MemDC = CreateCompatibleDC( hdc );

// fill it with test brush

FillRect( MemDC, &r, (HBRUSH)GetStockObject( GRAY_BRUSH ) );

// select loaded bitmap into memory DC

HBITMAP old = (HBITMAP)SelectObject( MemDC, bmp );

// get bitmaps dimensions

BITMAP b;

GetObject( bmp, sizeof(BITMAP), &b );

// needed to preserve bitmap's sharpness

SetStretchBltMode( hdc, BLACKONWHITE );

StretchBlt( hdc, 0, 0, r.right - r.left, r.bottom - r.top,
MemDC, 0, 0, b.bmWidth, b.bmHeight, SRCCOPY );

/* TransparentBlt( ... ); call should go here,

so I can make portion of the bitmap transparent,

in order for the gray brush can be seen */

// cleanup

SelectObject( MemDC, old );

DeleteDC(MemDC);

EndPaint(hWnd, &ps);

}
return 0L;
break;

问题:

如何修改上面的代码,让位图透明,让测试笔刷可见?

原图如下。

enter image description here

我只需要使用 TransparentBlt( ..., RGB( 0, 0, 0 ) ); 使其在黑色区域透明。

显示结果的示例图片:

enter image description here

我的努力:

浏览互联网,我只找到了关于双缓冲的简单教程。

我还没有找到类似的东西,但老实说,我对 WIN32 API 没有经验,所以我不知道如何正确地表达问题,以获得更好的搜索结果。

如果需要更多信息,请提出要求,我会提供。

为了使问题简短,省略了它。

最佳答案

您需要创建一个蒙版,使用特定的光栅操作来仅复制定义了蒙版的像素。 http://www.winprog.org/tutorial/transparency.html

下一个代码是MFC,但是您可以很容易地提取MFC对象并将其转换为标准GDI操作。 http://www.codeproject.com/Articles/703/Drawing-Transparent-Bitmap-with-ease-with-on-the-f

关于c++ - 适当结合StretchBlt和TransparentBlt,可以正确创建透明位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949590/

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