0

如何更改 SDL_Texture 的不透明度?而且我不知道如何在我的函数中应用不透明度数。

我的代码

    void drawTexture(SDL_Texture *img, int x, int y, int width, int height, double opacity)
    {
        SDL_Rect SrcR;
        SDL_Rect DestR;

        SrcR.x = 0;
        SrcR.y = 0;
        SrcR.w = width;
        SrcR.h = height;

        DestR.x = x;
        DestR.y = y;
        DestR.w = width;
        DestR.h = height;

        SDL_RenderCopy(_main::_main_renderer, img, &SrcR, &DestR);
    }
4

2 回答 2

4

使用SDL_SetTextureAlphaMod

SDL_SetTextureAlphaMod(img, opacity);

这将设置纹理的不透明度(alpha),alpha 值必须是Uint80(完全透明,也就是不可见)到255(完全不透明)。

于 2013-12-17T16:39:00.773 回答
0

开放问题没有关于img纹理来源的信息,因此选择的答案不能纠正纹理是从没有 Alpha 的原始像素数据创建的,即使用以下方法:

SDL_UpdateTexture(img, NULL, pixels, pitch);

如果像素包含不带 alpha 的原始像素数据,即带有A 0x00 的 ARGB,即使您这样做

SDL_UpdateTexture(img, NULL, pixels, pitch);
SDL_SetTextureAlphaMod(img, opacity);

您将看不到纹理(在这种情况下,alpha 为 0x00)或者您会看到垃圾

于 2021-05-25T10:45:01.717 回答