gpt4 book ai didi

德尔福6 : How to create a Bitmap with TextOut that has an Alpha channel?

转载 作者:行者123 更新时间:2023-12-02 02:36:05 25 4
gpt4 key购买 nike

我将描述我的总体目标,以防我提出的问题不是获得我正在寻找的答案的最佳形式。我有一个围绕 X 轴旋转的单词球体或“单词球”。当单词旋转到后面时(Z坐标从-1到1,从前到后),我打算更改每个单词的大小和不透明度,以便“前面”中的单词100%不透明且全尺寸,并且单词后面较小且有些透明。我更愿意使用直接的 Delphi 代码来完成此操作,并避免使用 Direct3D 等。我已经有了可以正常工作的旋转代码。我只需要实现我的基于 Z 坐标的感知着色想法。

当我创建单词球时,我为每个单词动态创建一个 TImage 组件。我使用 TCanvas.TextOut() 方法以居中方式将单词“打印”到 TImage 位图。我打算使用 BitBlt 将该位图复制到容纳单词球的主 Canvas 中的正确位置,因为 BitBlt 速度很快,并且可以动态调整位图大小,满足我的感知着色操作的要求之一。

但我不知道促进 Alpha 混合的最佳方法。我知道 Windows 有 AlphaBlend() 调用,而且使用起来似乎相当简单。但我需要知道如何创建一个位图,该位图是具有 Alpha channel 的每个字 TImage 组件的副本。请注意,在我的例子中,整个位图的 Alpha channel 将具有统一的值,因为我希望根据 Z 坐标将不透明度统一应用于整个单词。

动态创建的 TImage 组件(带有使用 TCanvas.TextOut() 创建的位图)是否有 Alpha channel ?如果没有,我如何创建一个,或者实时创建一个 TImage 位图的副本,该副本具有要传递给 AlphaBlend() 调用的 Alpha channel ?如果有更好的方法来完成这一切,请告诉我。

最佳答案

documentation说:

The SourceConstantaAlpha member of BLENDFUNCTION specifies an alpha transparency value to be used on the entire source bitmap. The SourceConstantaAlpha value is combined with any per-pixel alpha values. If SourceConstantaAlpha is 0, it is assumed that the image is transparent. Set the SourceConstantaAlpha value to 255 (which indicates that the image is opaque) when you only want to use per-pixel alpha values.

所以我想如果您只想要整个图像恒定的透明度,您的图像不必采用任何特殊格式。

另一方面,我认为这不是您想要的。想象一下一个矩形区域的文本与另一个区域重叠:虽然矩形的某些部分可能没有文本,但它们仍然会以半透明的白色或任何您作为背景、颜色的颜色绘制。

关于德尔福6 : How to create a Bitmap with TextOut that has an Alpha channel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3879060/

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