gpt4 book ai didi

delphi - StretchDIBits 问题

转载 作者:行者123 更新时间:2023-12-03 18:38:05 28 4
gpt4 key购买 nike

我想在 32 位位图(或 Bitmap32)上传输 32 位图像(带 alpha channel 的 PNG)。

我不知道如何告诉函数混合图像而不是 bliting 它。就像使用 AlphaBlend 而不是 BitBlt 一样,我需要让这个函数混合图像而不是简单的 blit。

这是我的例子:

ABitmap 是 TBitmap32 (GR32) 的类型,但对于带有 32 位调色板的常规 TBitmap,结果相同。

    ABitmap.SetSize(GetWidth, GetHeight);
SetStretchBltMode(ABitmap.Handle, COLORONCOLOR);//HALFTONE);
ABitmap.Clear($FFFFFFFF); { Here I try to erase background with white color, so that new image is blit over white surface }
StretchDIBits(
ABitmap.Handle,
0, 0,
GetWidth, GetHeight,
0, 0,
GetWidth, GetHeight,
FreeImage_GetBits(Dib),
FreeImage_GetInfo(Dib)^,
DIB_RGB_COLORS,
SRCCOPY); // --- SRCAND etc. produce not good results

FreeImage_GetBits 和 FreeImage_GetInfo 是 FreeImage 库函数,它们指向位数组的开头并指向结构。

我所做的 StretchDBit 不允许混合。

最佳答案

StretchDIBits()没有任何阿尔法混合的概念。您必须首先将您的 PNG 传输到一个临时的 32 位位图,确保根据需要设置其 alpha channel ,然后 AlphaBlend()临时位图到您的目标位图。或者,您可以只使用 AlphaBlend()如果 PNG 已经使用 32 位位图在内存中布局,则 PNG 直接到目标位图。

关于delphi - StretchDIBits 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10543203/

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