SDL2 (C++) 如何使图像变小
SDL2 (C++) How to render an image smaller
我终于开始习惯 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;
菜单大小是一个SDL_Rect
menuBoxTexture.TextRender(XmenuRenderLocX, XmenuRenderLocY, &menuSize, 0, NULL, SDL_FLIP_NONE);
menuTextTexture.render(XmenuRenderLocX+boarderW, XmenuRenderLocY+boarderW);
TextRender 和渲染做同样的事情,除了渲染使用比例因子将剪辑大小乘以更大(我将其留空 ->剪辑为 NULL 并使用基本高度/宽度(。对于 TextRender,我通过传递 menuSize SDL rect 来指定渲染尺寸。 这采用 200x200 正方形,并仅渲染 (XmenuRenderLocX, XmenuRenderLocY(的正方形的 120x160...因此基本上裁剪了正方形,这不是我想要的......我想调整正方形的大小。
任何帮助将不胜感激
最初,我使用的是提供的 LTexture::render 函数,该函数是为 Lazy Foo 的教程创建的。请参阅下面的代码
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 );
}
现在一切都像我想要的那样工作。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- std::vector的包装器,使数组的结构看起来像结构的数组
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何在全屏模式下(在OpenGL中)使背景透明
- SDL2 (C++) 如何使图像变小
- 如何在应用颜色校正之前使输入图像线性化
- 如何使用openCV和MFC使用线程处理图像
- C++图像库 - 找到一种颜色的像素并使它们变白,其他一切都变黑
- 如何使所有图像的大小相同并将它们写入文件夹中
- 如何使阈值窗口仅适用于我的一半图像
- 使背景的QLabel png图像透明的设计时间
- 如何在图像处理中有效地使用线程
- 多线程:如何在wxthread中使显示图像的GUI线程和处理图像同步的工作线程无阻塞
- C++11编译器何时会使RVO和NRVO优于移动语义和常量引用绑定
- 如何使我的纹理背景透明?(我的图像已经没有背景了)
- 我如何使图像调整大小在Qt缩放