扁平命令式支持库(不是类)。路径:支持库 → 图片支持库。
约定:图片 = 编码后的图像字节集(PNG / JPEG / BMP / GIF / TIFF / ICO / WebP 等)。命令以字节集进出,不持有句柄。处理后可直接赋给图片框:
图片框1.图片 = 图
底层为 Windows WIC(解码/编码)+ Direct2D / DirectWrite(合成、文字、任意角旋转、绘图)。
相关:图片框 YSS · 摄像头类(取一帧() 得到 JPEG 字节集,可继续用本库处理)。
快速开始
函数 按钮打开.单击 () {
文本 路径 = 打开文件对话框("选择图片", "", "图片|*.png;*.jpg;*.bmp;*.gif|所有文件|*.*")
如果 (路径 == "") {
返回()
}
字节集 图 = 图片_读文件(路径)
如果 (图片_是否有效(图) == 假) {
输出(图片_取最后错误())
返回()
}
图 = 图片_缩略图(图, 800, 800)
图 = 图片_画文字(图, "仅供办理", 16, 16, 28, "#CCFFFFFF", "", 0)
图 = 图片_转JPEG(图, 85)
图片框1.图片 = 图
图片_写文件(图, "C:\\out.jpg")
}
约定与错误
| 约定 |
说明 |
| 失败返回值 |
字节集命令返回空;逻辑返回假;整数多为 0;文本为空 |
| 查原因 |
图片_取最后错误() |
| 几何重编码 |
尽量保持原容器格式;GIF 几何只处理第一帧;ICO / 无法回写时输出 PNG |
| 任意角旋转 |
非 0/90/180/270 时扩大画布(透明底)并输出 PNG |
| 颜色文本 |
#RRGGBB 或 #AARRGGBB |
| 像素整数 |
0xAARRGGBB(与 图片_取像素 / 置像素 / 取主色 一致) |
| JPEG 质量 |
全局用 图片_置JPEG质量;图片_转JPEG 可传本次质量(0=沿用全局,默认约 90) |
| 插值 |
0 近邻 · 1 线性 · 2 高质量(默认)· 3 立方 |
| 系统 |
Windows 10 / 11,x86 / x64 |
读写与信息
| 命令 |
返回 |
说明 |
图片_读文件(路径) |
字节集 |
校验可解码后返回原文件字节(不重编码) |
图片_写文件(图像, 路径) |
逻辑 |
原样落盘;扩展名建议与格式一致 |
图片_是否有效(图像) |
逻辑 |
能否被 WIC 解码 |
图片_取宽度 / 图片_取高度 |
整数 |
像素尺寸;无效为 0 |
图片_取格式(图像) |
文本 |
png / jpeg / bmp / gif / tiff / ico / webp / unknown |
图片_取最后错误() |
文本 |
最近一次失败原因;成功时为空 |
图片_是否有透明(图像) |
逻辑 |
任一像素 Alpha < 255 |
几何
| 命令 |
返回 |
说明 |
图片_缩放(图像, 宽, 高, [插值=2]) |
字节集 |
宽或高为 0 时按另一边保持比例 |
图片_按比例缩放(图像, 比例, [插值=2]) |
字节集 |
1=原大,0.5=一半;比例须大于 0 且不超过 64 |
图片_裁剪(图像, 左, 上, 宽, 高) |
字节集 |
宽或高 ≤0 表示取到右/下边缘;区域须落在图内 |
图片_旋转(图像, 角度) |
字节集 |
0/90/180/270 精确;其它角度扩大画布→PNG |
图片_翻转(图像, 方向) |
字节集 |
1 水平 · 2 垂直 · 3 两者 |
图片_缩略图(图像, 最大宽, 最大高) |
字节集 |
等比缩进框内、不放大;某一边 ≤0 表示不限制该边 |
图片_扶正(图像) |
字节集 |
按拍摄方向摆正;无方向返回原字节;读文件不自动扶正 |
图片_扩展画布(图像, 左, 上, 右, 下, [颜色=""]) |
字节集 |
四周加边不缩放;空颜色=透明 |
字节集 小 = 图片_缩放(图, 320, 0) // 宽 320,高按比例
字节集 半 = 图片_按比例缩放(图, 0.5, 1) // 线性插值
字节集 块 = 图片_裁剪(图, 10, 20, 0, 80) // 宽取到右边缘,高 80
字节集 转 = 图片_旋转(图, 90)
字节集 镜 = 图片_翻转(图, 1)
字节集 缩 = 图片_缩略图(图, 160, 160)
绘制与合成
| 命令 |
返回 |
说明 |
图片_创建(宽, 高, [颜色=\"\"]) |
字节集 |
空白 PNG;空颜色=全透明 |
图片_绘制(底图, 图层, 左, 上, [透明度=100], [宽=0], [高=0]) |
字节集 |
贴图层;宽/高>0 时拉伸,只给一边则保持图层比例 |
图片_画文字(图像, 内容, 左, 上, [字号=16], [颜色], [字体], [对齐=0]) |
字节集 |
对齐:0 左 · 1 中 · 2 右;字体空=微软雅黑 |
图片_填充矩形(图像, 左, 上, 宽, 高, 颜色) |
字节集 |
填充矩形 |
图片_画线(图像, x1, y1, x2, y2, 颜色, [线宽=1]) |
字节集 |
线宽 1–64 |
图片_画圆(图像, 圆心左, 圆心上, 半径, 颜色, [填充=1]) |
字节集 |
1 实心 · 0 空心 |
图片_九宫格(图像, 左, 上, 右, 下, 目标宽, 目标高) |
字节集 |
四角不变形拉伸;输出 PNG |
图片_圆角(图像, 半径) |
字节集 |
四角透明圆角;0 返回原字节;输出 PNG |
图片_描边矩形(图像, 左, 上, 宽, 高, 颜色, [线宽=1]) |
字节集 |
空心矩形,线宽 1–64 |
字节集 画布 = 图片_创建(800, 600, "#FF202020")
字节集 合 = 图片_绘制(画布, 水印, 20, 20, 80, 120, 0) // 宽 120,高按比例
字节集 出 = 图片_画文字(合, "YStudio", 400, 16, 28, "#FFFFFFFF", "", 1)
出 = 图片_填充矩形(出, 8, 8, 120, 40, "#CCFF8800")
出 = 图片_画线(出, 0, 0, 200, 80, "#FFFF0000", 2)
出 = 图片_画圆(出, 80, 80, 36, "#FF3399FF", 0)
图片框1.图片 = 图片_九宫格(皮肤, 8, 8, 8, 8, 240, 64)
滤镜与色彩
| 命令 |
返回 |
说明 |
图片_灰度(图像) |
字节集 |
灰度 |
图片_反色(图像) |
字节集 |
反相(保留 Alpha) |
图片_亮度(图像, 增量) |
字节集 |
-100..100,0 返回原字节 |
图片_对比度(图像, 增量) |
字节集 |
同上 |
图片_饱和度(图像, 增量) |
字节集 |
同上;-100 接近灰度 |
图片_模糊(图像, 半径) |
字节集 |
0..32,0 返回原字节 |
图片_锐化(图像, [强度=50]) |
字节集 |
0..100,0 返回原字节 |
图片_色相(图像, 偏移) |
字节集 |
-180..180 度,0 返回原字节 |
图片_去背景色(图像, 颜色, [容差=32]) |
字节集 |
接近色变透明;容差 0..255 |
图片_置透明度(图像, 透明度) |
字节集 |
整图 Alpha 按百分比缩放;100 不变 |
图片_马赛克(图像, 块大小, [左=0], [上=0], [宽=0], [高=0]) |
字节集 |
块大小 1–256;宽/高≤0 到边缘 |
图片框1.图片 = 图片_灰度(图)
图片框1.图片 = 图片_亮度(图, 20)
图片框1.图片 = 图片_模糊(图, 3)
图片框1.图片 = 图片_去背景色(图, "#FFFFFFFF", 24)
格式转换
| 命令 |
返回 |
说明 |
图片_转PNG / 转BMP / 转GIF / 转WebP |
字节集 |
失败返回空(不静默回退成 PNG) |
图片_转JPEG(图像, [质量=0]) |
字节集 |
1..100 仅本次;0 沿用全局 |
图片_置JPEG质量(质量) |
逻辑 |
1..100,影响后续 JPEG 编码 |
转WebP 依赖系统 WIC 编码器。Windows 10 通常只有 WebP 解码器、没有编码器,这条会失败;Windows 11 才有编码器。失败时看 图片_取最后错误()。
像素
| 命令 |
返回 |
说明 |
图片_取像素(图像, 左, 上) |
整数 |
0xAARRGGBB;越界返回 0 |
图片_置像素(图像, 左, 上, 颜色) |
字节集 |
返回新图 |
图片_取像素数据(图像) |
字节集 |
BGRA 行主序,步长=宽×4 |
图片_从像素数据(宽, 高, 像素) |
字节集 |
重建为 PNG;长度须为 宽×高×4 |
图片_取主色(图像) |
整数 |
平均色 0xAARRGGBB |
整数 c = 图片_取像素(图, 0, 0)
图 = 图片_置像素(图, 10, 10, 0xFFFF0000)
字节集 px = 图片_取像素数据(图)
整数 w = 图片_取宽度(图)
整数 h = 图片_取高度(图)
图片框1.图片 = 图片_从像素数据(w, h, px)
剪贴板
| 命令 |
返回 |
说明 |
图片_读剪贴板() |
字节集 |
优先 PNG 格式,否则 DIB→PNG |
图片_写剪贴板(图像) |
逻辑 |
写入 PNG + DIB(会改系统剪贴板) |
与「剪贴板支持库」的路径/文本 API 独立;本库面向图像字节集。
多帧(GIF)
| 命令 |
返回 |
说明 |
图片_取帧数(图像) |
整数 |
普通图为 1 |
图片_取帧(图像, 索引) |
字节集 |
指定帧→PNG;索引从 0 起 |
图片_取帧延时(图像, 索引) |
整数 |
GIF 帧延时(毫秒);无元数据时可能为 0 |
几何/滤镜仍按第一帧处理;要处理动图请先 取帧 再处理。
与图片框 / 摄像头
// 文件 → 处理 → 显示
字节集 图 = 图片_读文件(路径)
图片框1.图片 = 图片_灰度(图)
// 摄像头抓拍 JPEG → 本库
摄像头类 cam
cam.打开(0)
字节集 jpg = cam.取一帧()
图片框1.图片 = 图片_缩略图(jpg, 640, 480)
// 嵌入资源(见 resource-embed.md)
图片框1.图片 = 到字节集(":/img/logo.png")
图片框负责显示模式(拉伸/等比等);本库负责像素处理。实时摄像头预览请用 cam.开始预览(图片框),不要每帧走本库编解码。
注意
- 大图会占内存:缩放/滤镜先解码为 32bpp BGRA。可用
图片_缩略图 先缩小再处理。
图片_读文件 不重编码;缩放/滤镜/绘制 等会重编码。
图片_扶正 按 EXIF 拍摄方向摆正;图片_读文件 不会自动调用。
- 写入剪贴板会覆盖用户当前剪贴板内容。
- 命令签名以 IDE 支持库 → 图片支持库 面板为准。