SetSize 控制渲染尺寸,viewBox 定义内部坐标系,SetOrigin 调整绘制原点。
| 函数 | 说明 |
|---|---|
int xgeSvgSetSize(xge_svg pSvg, float fWidth, float fHeight) | 设置渲染尺寸 |
int xgeSvgGetSize(xge_svg pSvg, float* pWidth, float* pHeight) | 获取尺寸 |
int xgeSvgSetOrigin(xge_svg pSvg, float fX, float fY) | 设置绘制原点 |
int xgeSvgGetOrigin(xge_svg pSvg, float* pX, float* pY) | 获取原点 |
int xgeSvgGetViewBox(xge_svg pSvg, xge_rect_t* pViewBox) | 获取 viewBox |
gcc -O2 -I. -o ch74.exe ch74_main.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch74.exe
xge_svg icon = NULL;
xgeSvgCreate(&icon);
xgeSvgLoad(icon, "assets/star.svg");
// 查看原始 viewBox
xge_rect_t vb;
xgeSvgGetViewBox(icon, &vb);
// vb = {0, 0, 24, 24} — 典型 24px 图标
// 缩放到 48x48 绘制
xgeSvgSetSize(icon, 48.0f, 48.0f);
// 设置绘制原点(左上角位置)
xgeSvgSetOrigin(icon, 100.0f, 50.0f);
// 获取当前尺寸确认
float w, h;
xgeSvgGetSize(icon, &w, &h);
// w=48, h=48将以下代码保存为 ch74_main.c,编译后运行即可看到同一 SVG 以不同尺寸绘制的效果:
#include "xge.h"
static xge_svg g_icon = NULL;
static int g_iFrame = 0;
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x081114FF);
g_iFrame++;
// 动画缩放:32 → 128 → 32
float sz = 80.0f + 48.0f * (float)sin(g_iFrame * 0.03f);
// 绘制 3 个不同尺寸
float sizes[] = { 48.0f, sz, 128.0f };
float xPos[] = { 100.0f, 350.0f, 580.0f };
for (int i = 0; i < 3; i++) {
xgeSvgSetSize(g_icon, sizes[i], sizes[i]);
xgeSvgSetOrigin(g_icon, xPos[i], 250.0f);
xgeSvgDraw(g_icon, 0.25f);
}
return XGE_OK;
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 800;
d.iHeight = 600;
d.sTitle = "ch74 - SVG Size & viewBox";
d.iFlags = XGE_INIT_VSYNC;
xgeInit(&d);
xgeSvgCreate(&g_icon);
xgeSvgLoad(g_icon, "assets/icon.svg");
// 查看原始 viewBox
xge_rect_t vb;
xgeSvgGetViewBox(g_icon, &vb);
xgeRun(onFrame, NULL);
xgeSvgDestroy(g_icon);
xgeUnit();
return 0;
}