图像处理和矩阵计算源码
.版本 2
.程序集 程序集1, , , ' 本源码来自三叶资源网(www.sanye.cx)
.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
_临时子程序 () ' 在初始化代码执行完毕后调用测试代码
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 _临时子程序
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
.子程序 数值_右移_ASM, 整数型, , 将某整数的数据位右移指定位数,返回移动后的结果。本命令为中级命令。
.参数 欲移动的整数, 整数型
.参数 欲移动的位数, 整数型
置入代码 ({ 139, 69, 8 }) ' 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
置入代码 ({ 139, 77, 12 }) ' 8B4D 0C mov ecx,dword ptr ss:[ebp+0xC]
置入代码 ({ 211, 232 }) ' D3E8 shr eax,cl
置入代码 ({ 201 }) ' C9 leave
置入代码 ({ 194, 8, 0 }) ' C2 0800 retn 0x8
返回 (0)
.子程序 GdipRotateAtMatrix, 整数型
.参数 matrix, 整数型
.参数 angle, 小数型
.参数 center_x, 小数型
.参数 center_y, 小数型, , ' 本源码来自三叶资源网(www.sanye.cx)
.参数 order, 整数型
.局部变量 返回值, 整数型
.如果 (order = 0)
返回值 = GdipTranslateMatrix (matrix, center_x, center_y, order)
返回值 = GdipRotateMatrix (matrix, angle, order)
返回值 = GdipTranslateMatrix (matrix, -center_x, -center_y, order)
.否则
返回值 = GdipTranslateMatrix (matrix, -center_x, -center_y, order)
返回值 = GdipRotateMatrix (matrix, angle, order)
返回值 = GdipTranslateMatrix (matrix, center_x, center_y, order)
.如果结束
返回 (返回值)
.子程序 数值_位异或_ASM, 整数型, , 如两个数值对应比特位的值不相等,则返回值的对应位就为1,否则为0
.参数 _参数1, 整数型
.参数 _参数2, 整数型
置入代码 ({ 139, 69, 8, 139, 77, 12, 51, 193, 201, 194, 8, 0 })
返回 (0)
.子程序 数组中间值, 整数型
.参数 参数1, 整数型, 数组
最快排序_整数 (参数1, 真)
返回 (参数1 [(取数组成员数 (参数1) + 1) \ 2])
.子程序 数值_位与_ASM, 整数型, , 如两个数值有某共同比特位为1,则返回值的对应位也为1,否则为0。返回计算后的结果。本命令为中级命令。
.参数 位运算数值一, 整数型
.参数 位运算数值二, 整数型
置入代码 ({ 139, 69, 8 }) ' 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
置入代码 ({ 139, 77, 12 }) ' 8B4D 0C mov ecx,dword ptr ss:[ebp+0xC]
置入代码 ({ 33, 200 }) ' 21C8 and eax,ecx
置入代码 ({ 201 }) ' C9 leave
置入代码 ({ 194, 8, 0 }) ' C2 0800 retn 0x8
返回 (0)
.子程序 最快排序_整数
.参数 排序的数组, 整数型, 参考 数组
.参数 从小到大排序, 逻辑型, 可空, 默认从小到大
.局部变量 基数, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 新基索引, 整数型
.局部变量 栈起始点, 整数型, , "0"
.局部变量 栈结束点, 整数型, , "0"
.局部变量 栈指针, 整数型
.局部变量 起始点, 整数型
.局部变量 结束点, 整数型
.局部变量 数组总数, 整数型
.局部变量 随机种子, 整数型
数组总数 = 取数组成员数 (排序的数组)
.如果真 (数组总数 = 0)
返回 ()
.如果真结束
从小到大排序 = 选择 (是否为空 (从小到大排序), 真, 从小到大排序)
随机种子 = 31
置随机数种子 (随机种子)
重定义数组 (栈起始点, 假, 数组总数)
重定义数组 (栈结束点, 假, 数组总数)
栈指针 = 1
起始点 = 1
结束点 = 数组总数
栈起始点 [1] = 起始点
栈结束点 [1] = 结束点
.判断循环首 (栈指针 > 0)
起始点 = 栈起始点 [栈指针]
结束点 = 栈结束点 [栈指针]
栈指针 = 栈指针 - 1
.如果真 (起始点 = 结束点)
到循环尾 ()
.如果真结束
i = 起始点
j = 结束点
变量交换_ASM (排序的数组 [起始点], 排序的数组 [取随机数 (起始点, 结束点)])
基数 = 排序的数组 [起始点]
.判断循环首 (真)
.变量循环首 (j, i, -1, j)
.判断开始 (从小到大排序 = 真)
.如果真 (排序的数组 [j] < 基数) ' 从大到小 > ,从小到大 <
跳出循环 ()
.如果真结束
.默认
.如果真 (排序的数组 [j] > 基数) ' 从大到小 > ,从小到大 <
跳出循环 ()
.如果真结束
.判断结束
.变量循环尾 ()
.如果真 (j ≤ i)
' i
新基索引 = i
跳出循环 ()
.如果真结束
.变量循环首 (i, j, 1, i)
.判断开始 (从小到大排序 = 真)
.如果真 (排序的数组 [i] > 基数) ' 从大到小 < ,从小到大 >
跳出循环 ()
.如果真结束
.默认
.如果真 (排序的数组 [i] < 基数) ' 从大到小 < ,从小到大 >
跳出循环 ()
.如果真结束
.判断结束
.变量循环尾 ()
.如果真 (i ≥ j)
' j
新基索引 = j
跳出循环 ()
.如果真结束
变量交换_ASM (排序的数组 [j], 排序的数组 [i])
.判断循环尾 ()
变量交换_ASM (排序的数组 [起始点], 排序的数组 [新基索引])
.如果真 (新基索引 > 起始点)
栈指针 = 栈指针 + 1
栈起始点 [栈指针] = 起始点
栈结束点 [栈指针] = 新基索引
.如果真结束
.如果真 (新基索引 < 结束点 - 1)
栈指针 = 栈指针 + 1
栈起始点 [栈指针] = 新基索引 + 1
栈结束点 [栈指针] = 结束点
.如果真结束
.判断循环尾 ()
.子程序 变量交换_ASM, , , 以变量和变量的交换方式,来交换两个变量数据,注意两变量要是相同类型的
.参数 变量1, 通用型, 参考, 变量;在某种情况下可以是数据
.参数 变量2, 通用型, 参考, 变量;在某种情况下可以是数据
置入代码 ({ 139, 69, 8, 139, 77, 12, 139, 16, 135, 17, 137, 16 })
.子程序 数组最大值, 整数型
.参数 参数1, 整数型, 数组
最快排序_整数 (参数1, 真)
返回 (参数1 [取数组成员数 (参数1)])
.子程序 数组最小值, 整数型
.参数 参数1, 整数型, 数组
最快排序_整数 (参数1, 真)
返回 (参数1 [1])
.子程序 取颜色值_ASM, 整数型, , RGB颜色
.参数 红色, 整数型
.参数 绿色, 整数型
.参数 蓝色, 整数型
.局部变量 ret, 整数型
置入代码 ({ 139, 69, 8, 139, 93, 12, 139, 77, 16, 193, 225, 16, 193, 227, 8, 11, 216, 11, 203, 137, 77, 252 })
' mov eax,[ebp+8];R
' mov ebx,[ebp+12];G
' mov ecx,[ebp+16];B
' shl ecx,16
' shl ebx,8
' or ebx,eax
' or ecx,ebx
' mov [ebp-4],ecx
返回 (ret)
.子程序 GetRGB_ASM
.参数 rgb, 整数型
.参数 r, 整数型, 参考 可空
.参数 g, 整数型, 参考 可空
.参数 b, 整数型, 参考 可空
r = 数值_位与_ASM (rgb, 255)
g = 数值_位与_ASM (数值_右移_ASM (rgb, 8), 255)
b = 数值_位与_ASM (数值_右移_ASM (rgb, 16), 255)
.子程序 COM_GUIDtoString2, 文本型, , StringFromGUID2
.参数 clsid, 字节集
.局部变量 str, 字节集
str = 取空白字节集 (78)
StringFromGUID2_ (clsid, str, 78)
返回 (Encoder.W2A (str))
.子程序 COM_StringToGUID2, 字节集, , CLSIDFromString
.参数 text, 文本型
.局部变量 clsid, 字节集
clsid = 取空白字节集 (16)
CLSIDFromString2 (Encoder.A2W (text), clsid)
返回 (clsid)
.子程序 ARGB2RGB_ASM, 整数型
.参数 ARGB颜色, 整数型
.参数 透明度, 整数型, 参考 可空
.局部变量 c, 整数型
.局部变量 a, 整数型
c = 0
a = 0
置入代码 ({ 139, 69, 8, 102, 139, 216, 193, 232, 16, 134, 195, 134, 101, 248, 193, 224, 16, 102, 139, 195, 137, 69, 252 })
' add byte ptr [ebp+08h], al
' mov bx, ax
' shr eax, 10h
' xchg bl, al
' xchg byte ptr [ebp-08h], ah
' shl eax, 10h
' mov ax, bx
' mov dword ptr [ebp-04h], eax
.如果真 (是否为空 (透明度) = 假)
透明度 = a
.如果真结束
返回 (c)
.子程序 RGB2ARGB_ASM, 整数型, , 汇编_RGB2ARGB
.参数 color, 整数型
.参数 alpha, 整数型
.局部变量 r, 整数型
置入代码 ({ 139, 69, 8, 139, 93, 8, 139, 77, 8, 139, 85, 12, 193, 232, 16, 37, 255, 0, 0, 0, 193, 235, 8, 129, 227, 255, 0, 0, 0, 129, 225, 255, 0, 0, 0, 193, 226, 24, 193, 225, 16, 193, 227, 8, 11, 216, 11, 203, 11, 209, 137, 85, 252 })
' mov eax,[ebp+8];R
' mov ebx,[ebp+8];G
' mov ecx,[ebp+8];B
' mov edx,[ebp+12];A
' shr eax,16
' and eax,255
' shr ebx,8
' and ebx,255
' and ecx,255
' shl edx,24
' shl ecx,16
' shl ebx,8
' or ebx,eax
' or ecx,ebx
' or edx,ecx
' mov dword ptr [ebp-4],edx
返回 (r)
图像处理和矩阵计算源码 易语言