像素读回
读像素、灌色、抓图贴图、截屏。
完整清单见「UI 开发」。下面每个接口都带一句用法和一个例子;签名取自
Lib/c/vml_ui.h(权威来源)。
ui_2d_flood_fill(int x, int y, int color, int border)
从 (x,y) 灌色,碰到 border 色就停(四连通)。返回落笔的矩形条数,0 = 没填(种子点本身就在边界色上时是这样 —— 老程序“点在线上”很常见,不是错误)。
ui_2d_flood_fill(50, 50, 0xFF00FF00, 0xFFFF0000); /* 在红框里灌绿 */
ui_2d_get_image(int x, int y, int w, int h)
存一块画面 → 句柄(≥1),失败 0。老程序的 malloc(imagesize(...)) 照写不误,只是那块内存我们不用。
int img = ui_2d_get_image(0, 0, 32, 32); /* 抓一块 32×32 */
ui_2d_get_pixel(int x, int y)
读一个像素的颜色(0xRRGGBB;越界 -1)。 ⚠ 场景是保留模式的,每次调用宿主都要当场光栅化一次 —— 别放进密集大循环。
int c = ui_2d_get_pixel(100, 100);
if (c == 0xFFFFFF) { /* 那里是白的 */ }
ui_2d_put_image(int x, int y, int handle, int mode)
把句柄那块贴到 (x,y)。mode:0 = COPY 直接贴 / 1 = XOR 异或(异或要先读目的像素,慢一些)。
ui_2d_put_image(200, 100, img, 0); /* 贴过去 */
ui_2d_put_image(200, 100, img, 1); /* 再异或一次 = 擦掉(精灵动画的老做法)*/
ui_scr_screenshot(char* path)
把当前窗口存成 PNG(路径相对工作区;不给路径就自动取名落在 shot/ 下)。返回 1 成功。
ui_scr_screenshot("shot/win.png");