繁体   English   中英

SDL 2.0放大纹理

[英]SDL 2.0 enlarge texture

为了制作按钮,我以这种方式创建和渲染纹理:

typedef struct{
    SDL_Rect pos;
    SDL_Texture* texture;
    int hovered;
} button;

button getButton(int x, int y, char * label, TTF_Font* font, SDL_Color color){
    button btn;
    btn.hovered = false;
    btn.pos.x = x;
    btn.pos.y = y;
    SDL_Surface* surface = TTF_RenderText_Solid(font, label, color);
    btn.pos.w = surface->w;
    btn.pos.h = surface->h;
    btn.texture = SDL_CreateTextureFromSurface(renderer, surface);
    SDL_FreeSurface(surface);
    return btn;
}

void drawButton(button btn){
    SDL_RenderCopyEx( renderer, btn.texture, NULL, &btn.pos, 0, NULL, SDL_FLIP_NONE);
    if(btn.hovered){
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 0x00);
        SDL_RenderDrawRect(renderer, &btn.pos);
}

问题是我得到的纹理大小等于标签之一。 如何在不拉伸纹理像素的情况下增加纹理像素的大小,即在其侧面添加空白?

就像是

void drawButton(button btn){
    SDL_RenderCopyEx( renderer, btn.texture, NULL, &btn.pos, 0, NULL, SDL_FLIP_NONE);
    if(btn.hovered){
        int padding = 10;
        SDL_Rect pos = {btn.pos.x - padding,   btn.pos.y - padding, 
                        btn.pos.w + 2*padding, btn.pos.h + 2*padding };
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 0x00);
        SDL_RenderDrawRect(renderer, &pos);
    }
}

这样,只有矩形的大小发生变化,很明显,我只是凭空抽出了10的填充大小,您需要自己选择合适的东西。

找到了一种方法。 要放大纹理,可以创建代表按钮背景的表面,然后将它们组合:

button getButton(int x, int y, char * label, TTF_Font* font, SDL_Color color){
    button btn;
    btn.hovered = false;
    btn.pos.x = x;
    btn.pos.y = y;

    SDL_Surface* surface = TTF_RenderText_Solid(font, label, color);
    SDL_Surface* back = SDL_CreateRGBSurface(0, surface->w+10, surface->h+10,
                                            32, 0, 0, 0, 0);// create a black background
    SDL_Rect t = {5, 5, back->w, back->w}; // place in a background to place label
    SDL_BlitSurface(surface, NULL, back, &t); // combining surfaces
    btn.pos.w = back->w;
    btn.pos.h = back->h;

    btn.texture = SDL_CreateTextureFromSurface(renderer, back);
    SDL_FreeSurface(surface);
    return btn;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM