SDL2(C ++)如何将图像渲染得更小

问题描述 投票:0回答:1

我终于开始习惯SDL 2的渲染基本功能,我偶然发现了一个我相信公众可以回答的问题。在我的代码中,我生成一些文本并使用教程中的一些代码,我可以将文本作为纹理加载(即Lazy foo的教程)。此纹理现在具有基于字体大小和输入文本的宽度和高度。我使用的另一个功能加载在一个由花式边框制成的正方形中,我希望将其用作菜单。这个方块是200x200。例如,如果文本纹理是100x160,我希望正方形现在可以渲染为120x180图像(基本上将其压缩为与文本纹理相似的大小)。

tl;博士:

我有200x200平方。

我有100x160文本纹理

我想将200x200正方形渲染为120x160正方形并在正方形内渲染100x160文本。

*** loadFromRenderedText采用ttf字体,字符串和颜色(RGBA)来创建基于字符串的图像纹理 - >生成自己的宽度/高度

    menuTextTexture.loadFromRenderedText(menuFont, "Info Item Skill Back",menuTextColor);
    menuSize.x = 0;
    menuSize.y = 0;
    menuSize.w = menuTextTexture.getWidth() + boarderW;
    menuSize.h = menuTextTexture.getHeight() + boarderW;

*** menuSize是一个SDL_Rect

    menuBoxTexture.TextRender(XmenuRenderLocX, XmenuRenderLocY,  &menuSize, 0, NULL, SDL_FLIP_NONE);
    menuTextTexture.render(XmenuRenderLocX+boarderW, XmenuRenderLocY+boarderW);

TextRender和render做同样的事情,除了渲染使用缩放因子将剪辑大小乘以更大(我留空 - >剪辑然后是NULL并使用基本高度/宽度)。对于TextRender,我通过传递menuSize SDL rect来指定渲染尺寸。这需要200x200的正方形并且只渲染120x160的正方形(XmenuRenderLocX,XmenuRenderLocY)......因此基本上裁剪了正方形,这不是我想要的......我想调整正方形的大小。

任何帮助将不胜感激

c++ sdl-2
1个回答
0
投票

最初,我使用为Lazy Foo教程创建的LTexture :: render函数。见下面的代码

    void LTexture::render( int x, int y, SDL_Rect* clip, double angle, SDL_Point* center, SDL_RendererFlip flip )
{
//Set rendering space and render to screen
SDL_Rect renderQuad = { x, y, mWidth, mHeight };

//Set clip rendering dimensions
if( clip != NULL )
{
    renderQuad.w = SCALE_SIZE*(clip->w);
    renderQuad.h = SCALE_SIZE*(clip->h);
}
else if(mTexture ==NULL)
{
    printf("Warning: Texture to Render is NULL!\n");
}

//Render to screen
SDL_RenderCopyEx( gRenderer, mTexture, clip, &renderQuad, angle, center, flip );
}

但是因为直到现在我还没有完全理解函数的确切呈现方式,我实际上并没有告诉它在一个新的维度上渲染(除非在我用SCALE_SIZE放大所有内容的情况下)

我做了一个新功能以获得更多控制权

    void LTexture::DefinedRender(SDL_Rect* Textureclip, SDL_Rect* renderLocSize, double angle, SDL_Point* center, SDL_RendererFlip flip)
{
//Set clip rendering dimensions
if(mTexture ==NULL)
{
    printf("Warning: Texture to Render is NULL!\n");
}
//Render to screen
SDL_RenderCopyEx( gRenderer, mTexture, Textureclip, renderLocSize, angle, center, flip );
}

现在一切都像我想要的那样。

© www.soinside.com 2019 - 2024. All rights reserved.