精易论坛

标题: was/tcp合适图形图像查看 [打印本页]

作者: 奔放的牛    时间: 2025-5-11 16:13
标题: was/tcp合适图形图像查看
调色算法

https://blog.csdn.net/leexuany/article/details/2619165?spm=1001.2014.3001.5501


用到的是进制转换
53 50 0F 00 01 00 03 00 1D 00 1D 00 00 00 00 00
我用大话2的一个按钮打个比方。
#53 50 文件标记SP
#0F 00 文件头长度
#01 00 动画图片的方向数
#03 00 每一个方向的图片数量
#1D 00 图片的总宽度 = 1x16+13 = 29
#1D 00 图片的总高度
#00 00 图片的关键点x
#00 00 图片的关键点y
物集西游TCP素材制作工具及修改文档.zip (1.73 MB, 下载次数: 4)

作者: 你的猫    时间: 2025-5-11 19:23
文件头解析部分
  
.版本 2[/b].子程序 解析WAS文件头, 逻辑型
子程序名返回值类型公开备 注
(未填写子程序名)   
参数名类 型参考可空数组备 注
参数名类 型参考可空数组备 注
文件路径文本型
方向数整数型
帧数整数型
宽度整数型
高度整数型
关键点X整数型
关键点Y整数型
变量名类 型静态数组备 注
文件号整数型 
文件标记字节型2
头长度短整数型 
' 打开文件
文件号 = 打开文件 (文件路径, #读入, )
如果 (文件号 = 0)
返回 ()

' 读取文件标记
读入字节集 (文件号, 文件标记, 2)
如果 (文件标记[1] ≠ 53 文件标记[2] ≠ 50)  ' "SP"
关闭文件 (文件号)
返回 ()

' 读取文件头长度
读入短整数 (文件号, 头长度)
' 读取其他参数
读入短整数 (文件号, 方向数)
读入短整数 (文件号, 帧数)
读入短整数 (文件号, 宽度)
读入短整数 (文件号, 高度)
读入短整数 (文件号, 关键点X)
读入短整数 (文件号, 关键点Y)
关闭文件 (文件号)
返回 ()


RGB转HSV调色算法实现
  
子程序名返回值类型公开备 注
RGB到HSV逻辑型 
参数名类 型参考可空数组备 注
R字节型
G字节型
B字节型
H小数型
S小数型
V小数型
变量名类 型静态数组备 注
fR小数型 
fG小数型 
fB小数型 
fCMax小数型 
fCMin小数型 
fDelta小数型 
' 将RGB值转换为0-1范围
fR = R ÷ 255
fG = G ÷ 255
fB = B ÷ 255
' 计算最大值和最小值
fCMax = 最大值 (fR, 最大值 (fG, fB))
fCMin = 最小值 (fR, 最小值 (fG, fB))
fDelta = fCMax - fCMin
' 计算V(亮度)
V = fCMax
' 计算S(饱和度)
如果 (fCMax = 0)
S = 0
S = fDelta ÷ fCMax

' 计算H(色调)
如果 (fDelta = 0)
H = 0
判断 (fCMax = fR)
H = 60 � ( (fG - fB) ÷ fDelta)
判断 (fCMax = fG)
H = 60 � ( (fB - fR) ÷ fDelta + 2)
判断 (fCMax = fB)
H = 60 � ( (fR - fG) ÷ fDelta + 4)
H = 0

如果 (H < 0)
H = H + 360


返回 ()


示例

  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
方向数整数型 
帧数整数型 
宽度整数型 
高度整数型 
关键点X整数型 
关键点Y整数型 
H小数型 
S小数型 
V小数型 
' 解析WAS文件头
如果 (解析WAS文件头 ("test.was", 方向数, 帧数, 宽度, 高度, 关键点X, 关键点Y))
调试输出 ("方向数:", 方向数)
调试输出 ("帧数:", 帧数)
调试输出 ("宽度:", 宽度)
调试输出 ("高度:", 高度)
调试输出 ("关键点X:", 关键点X)
调试输出 ("关键点Y:", 关键点Y)
调试输出 ("文件解析失败")

' 调色算法测试
RGB到HSV (255, 0, 0, H, S, V)  ' 红色
调试输出 ("红色 HSV:", H, S, V)
RGB到HSV (0, 255, 0, H, S, V)  ' 绿色
调试输出 ("绿色 HSV:", H, S, V)
RGB到HSV (0, 0, 255, H, S, V)  ' 蓝色
调试输出 ("蓝色 HSV:", H, S, V)


作者: 奔放的牛    时间: 2025-5-12 07:55
你的猫 发表于 2025-5-11 19:23
文件头解析部分[e=2].版本 2.子程序 解析WAS文件头, 逻辑型
.参数 文件路径, 文本型
.参数 方向数, 整数型, ...

哥,你这代码...
作者: 奔放的牛    时间: 2025-5-12 07:59
你的猫 发表于 2025-5-11 19:23
文件头解析部分[e=2].版本 2.子程序 解析WAS文件头, 逻辑型
.参数 文件路径, 文本型
.参数 方向数, 整数型, ...

都报错了
作者: 奔放的牛    时间: 2025-5-13 00:25
你的猫 发表于 2025-5-11 19:23
文件头解析部分[e=2].版本 2.子程序 解析WAS文件头, 逻辑型
.参数 文件路径, 文本型
.参数 方向数, 整数型, ...

??你这读入短整数.子程序呢?

作者: 奔放的牛    时间: 2025-5-13 22:58
你的猫 发表于 2025-5-11 19:23
文件头解析部分[e=2].版本 2.子程序 解析WAS文件头, 逻辑型
.参数 文件路径, 文本型
.参数 方向数, 整数型, ...

大佬!求解答啊
作者: 你的猫    时间: 2025-5-13 23:33
  
子程序名返回值类型公开备 注
解析SP文件头  
参数名类 型参考可空数组备 注
文件路径文本型
变量名类 型静态数组备 注
文件号整数型 
字节集数据字节集 
当前位置整数型 
方向数整数型 
图片数量整数型 
总宽度整数型 
总高度整数型 
关键点X整数型 
关键点Y整数型 
' 1. 读取文件前16字节
文件号 = 打开文件 (文件路径, #读入, )
字节集数据 = 读入字节集 (文件号, 16)
关闭文件 (文件号)
' 2. 验证文件标识
如果真 (取字节集左边 (字节集数据, 2){ 0x53, 0x50 })
信息框 ("不是有效的SP文件", 0, , )
返回 ()

' 3. 设置初始读取位置
当前位置 = 3 ' 跳过前2字节的SP标识
' 4. 读取文件头长度(小端转换示例)
' 读取0F 00 → 转换为00 0F → 十进制15
文件头长度 = 取字节集数据 (取字节集中间 (字节集数据, 当前位置, 2), #短整数型, )
当前位置 = 当前位置 + 2
' 5. 读取动画方向数
方向数 = 取字节集数据 (取字节集中间 (字节集数据, 当前位置, 2), #短整数型, )
当前位置 = 当前位置 + 2
' 6. 读取每个方向的图片数量
图片数量 = 取字节集数据 (取字节集中间 (字节集数据, 当前位置, 2), #短整数型, )
当前位置 = 当前位置 + 2
' 7. 读取总宽度和高度(十六进制转十进制)
总宽度 = 进制_十六到十 (取十六进制文本 (字节集数据[当前位置])) × 16 + 进制_十六到十 (取十六进制文本 (字节集数据[当前位置 + 1]))
当前位置 = 当前位置 + 2
总高度 = 进制_十六到十 (取十六进制文本 (字节集数据[当前位置])) × 16 + 进制_十六到十 (取十六进制文本 (字节集数据[当前位置 + 1]))
当前位置 = 当前位置 + 2
' 8. 读取关键点坐标
关键点X = 取字节集数据 (取字节集中间 (字节集数据, 当前位置, 2), #短整数型, )
当前位置 = 当前位置 + 2
关键点Y = 取字节集数据 (取字节集中间 (字节集数据, 当前位置, 2), #短整数型, )
' 9. 输出调试信息
调试输出 ("方向数:" + 到文本 (方向数))
调试输出 ("图片数量:" + 到文本 (图片数量))
调试输出 ("总宽度:" + 到文本 (总宽度))
调试输出 ("总高度:" + 到文本 (总高度))
调试输出 ("关键点X:" + 到文本 (关键点X))
调试输出 ("关键点Y:" + 到文本 (关键点Y))


扩展建议
  
' 增强版:处理多帧动画
如果真 (方向数 > 1)
' 计算每帧偏移量
每帧大小 = 总宽度 × 总高度 × 3 ' 假设24位色深
文件大小 = 取文件尺寸 (文件路径)
总帧数 = (文件大小 - 文件头长度) / 每帧大小

' 调色板处理示例(假设从第17字节开始)
字节集数据 = 读入字节集 (文件号, 文件头长度 - 16)
调色板 = 取字节集中间 (字节集数据, 1, 256×3) ' 标准256色调色板



作者: 奔放的牛    时间: 2025-5-13 23:50
你的猫 发表于 2025-5-13 23:33
[e=2].版本 2

.子程序 解析SP文件头

行不通,读入文件没反应




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4