SDL2(C ++)如何缩小图像

时间:2018-09-17 02:02:38

标签: c++ sdl-2

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

tl; dr:

我有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做相同的事情,除了render使用缩放因子将片段大小乘以更大(我留为空白-> clip为NULL并使用基本的高度/宽度)。对于TextRender,我通过传递menuSize SDL rect指定渲染尺寸。这需要200x200的正方形,并且仅在(XmenuRenderLocX,XmenuRenderLocY)处渲染正方形的120x160 ...因此实际上是裁剪了正方形,这不是我想要的...我想调整正方形的大小。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

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

<CustonClass ................../>

但是因为直到现在我还不完全了解该函数的呈现方式,所以我实际上并没有告诉它以新的尺寸呈现(除非使用SCALE_SIZE放大所有内容)

我做了一个新的功能来进行更多控制

    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 );
}

现在一切正常,就像我想要的那样。