首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDL清除SDL_SetTextureColorMod效应

SDL清除SDL_SetTextureColorMod效应
EN

Stack Overflow用户
提问于 2016-06-17 13:52:51
回答 1查看 814关注 0票数 1

我正在使用SDL_SetTextureColorMod函数来修改纹理。如In this question's answer所示,该函数不修改纹理本身,只在绘图时进行颜色修改。

问题是,在打电话给SDL_SetTextureColorMod时,我无法重置效果,也没有在网上找到任何东西。所以简单地说,我想给纹理添加暗效果。但是,我想要能够画出原始的纹理。当在应用中按G时,施加效果。我也试过

代码语言:javascript
复制
SDL_SetTextureColorMod(texture, 1, 1, 1);

但这并没有重设效果

代码

代码语言:javascript
复制
#include <SDL.h>
#include <SDL_image.h>

#include <iostream>

using namespace std;

int main2();

int WinMain()
{
    main2();
}
SDL_Texture* LoadTexture( const string& Filename, SDL_Renderer * renderer )
{
    if(renderer == nullptr)
        return nullptr;

    SDL_Texture* texture = IMG_LoadTexture( renderer, Filename.c_str() );
    if ( texture == nullptr )
    {
        std::cout << __FUNCTION__ << "(...): " << "Failed to load texture " << Filename << " error : " << SDL_GetError() << std::endl;
        return nullptr;
    }

    return texture;
}
int main2()
{
    bool quit = false;
    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);
    IMG_Init(IMG_INIT_JPG);

    SDL_Window * window = SDL_CreateWindow("SDL2 Grayscale",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
    SDL_Texture * texture = LoadTexture("teeth.png", renderer);
    if(!texture)
        return 0;

    while (!quit)
    {
        SDL_WaitEvent(&event);

        switch (event.type)
        {
        case SDL_QUIT:
            quit = true;
            break;
        case SDL_KEYDOWN:
            switch (event.key.keysym.sym)
            {
            case SDLK_g:
                //Uint8 * r, *g, *b;


                SDL_SetTextureColorMod(texture, 100, 100, 100);
                //greytexture = Greyscale(image, renderer, GreyscalePercentage);
                break;
            case SDLK_1:
                SDL_SetTextureColorMod(texture, 1, 1, 1);
                break;
            }
            break;
        }

        SDL_RenderCopy(renderer, texture, NULL, NULL);
        SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(texture);
    //SDL_FreeSurface(image);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    IMG_Quit();
    SDL_Quit();

    return 0;
}

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-19 15:37:28

函数SDL_SetTextureColorMod对红色、绿色和蓝色值使用Uint8。值0将不是颜色。而值255将是最大颜色。因此,若要将颜色重置为正常颜色,请使用255表示红色、绿色和蓝色。如:

代码语言:javascript
复制
SDL_SetTextureColorMod(texture, 255, 255, 255);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37883407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档