精易论坛

标题: RLE解码 返回指针长度 [打印本页]

作者: gyteme    时间: 2024-7-21 16:51
标题: RLE解码 返回指针长度
  
子程序名返回值类型公开备 注
RLE解码整数型 
参数名类 型参考可空数组备 注
读取位置整数型
行偏移整数型
宽度整数型
高度整数型
变量名类 型静态数组备 注
读地址整数型 
写地址整数型 
行长度整数型 
点阵长度整数型 
一字节整数型 
二比特整数型 
透明值整数型 
索引值整数型 
混合后整数型 
长度整数型 
a整数型 
行数整数型 
写地址 = 全局内存指针
写整数 (写地址, 131072)  ' 写tga文件头.....
写地址 = 写地址 + 4
写整数 (写地址, 0)
写地址 = 写地址 + 4
写整数 (写地址, 0)
写地址 = 写地址 + 4
写短整数 (写地址, 宽度)
写地址 = 写地址 + 2
写短整数 (写地址, 高度)
写地址 = 写地址 + 2
写短整数 (写地址, 2080)
写地址 = 写地址 + 2
' 点阵长度 = 18  ' tga头长度.....
读地址 = 行偏移 [高度] + 1
循环判断首 ()
一字节 = was数据 [读地址]
读地址 = 读地址 + 1
二比特 = 汇编右移 (一字节, 6)
' 调试输出 (二比特)
判断 (二比特 = 0)
如果 (位与 (一字节, 63) = 0)  ' 行结束,对齐4
判断 (行长度 > 宽度)
写地址 = 写地址 ��� (行长度 - 宽度) × 4
行长度 = 0
行数 = 行数 + 1
如果真 (高度 ≠ 行数)
读地址 = 行偏移 [高度 - 行数] + 1

判断 (行长度 > 0)
长度 = 宽度 - 行长度
计次循环首 (长度, )
写整数 (写地址, 0)
' 行长度 = 行长度 + 4
写地址 = 写地址 + 4
计次循环尾 ()
' 点阵长度 = 点阵长度 + 行长度
行长度 = 0
行数 = 行数 + 1
如果真 (高度 ≠ 行数)
读地址 = 行偏移 [高度 - 行数] + 1

判断 (行长度 = 0 was数据 [行偏移 [高度 - 行数] - 1] = 0)
计次循环首 (宽度, )
写整数 (写地址, 0)
写地址 = 写地址 + 4
计次循环尾 ()
行数 = 行数 + 1
如果真 (高度 ≠ 行数)
读地址 = 行偏移 [高度 - 行数] + 1




如果 (位与 (一字节, 32) = 32)  ' 带alpha像素,后一个字节为索引
透明值 = 位与 (一字节, 31)
索引值 = was数据 [读地址]
读地址 = 读地址 + 1
混合后 = 混合透明 (颜色表32 [索引值 + 1], 透明值 × 8)
写整数 (写地址, 混合后)
行长度 = 行长度 + 1
写地址 = 写地址 + 4

透明值 = was数据 [读地址]  ' 重复alpha
读地址 = 读地址 + 1
索引值 = was数据 [读地址]
读地址 = 读地址 + 1
混合后 = 混合透明 (颜色表32 [索引值 + 1], 透明值 × 8)
计次循环首 (位与 (一字节, 31), )
写整数 (写地址, 混合后)
写地址 = 写地址 + 4
行长度 = 行长度 + 1
计次循环尾 ()


判断 (二比特 = 1)  ' 后字节长度,后每个字节都为索引
计次循环首 (位与 (一字节, 63), )
索引值 = was数据 [读地址]
读地址 = 读地址 + 1
写整数 (写地址, 颜色表32 [索引值 + 1])
写地址 = 写地址 + 4
行长度 = 行长度 + 1
计次循环尾 ()
判断 (二比特 = 2)  ' 重复数,后一个字节为索引
索引值 = was数据 [读地址]
读地址 = 读地址 + 1
计次循环首 (位与 (一字节, 63), )
写整数 (写地址, 颜色表32 [索引值 + 1])
写地址 = 写地址 + 4
行长度 = 行长度 + 1
计次循环尾 ()
判断 (二比特 = 3)  ' 跳过数,用其它填充
长度 = 位与 (一字节, 63)
清零 (写地址, 长度)
写地址 = 写地址 + 长度 × 4
行长度 = 行长度 + 长度



调试输出 (行数, 高度)
循环判断尾 (行数 ≠ 高度)
返回 (宽度 × 高度 × 4 + 18)


i支持库列表   支持库注释   
spec特殊功能支持库




会异常停止 ,易语言也不报错。大神帮忙看下哪里的问题!





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