今天论坛偶然看到,然后用AI重写了一份,发现代码非常简洁干净。虽然不是我需要的,但是想学习一下。目前有个bug不会解决,希望各大佬解决了告诉我一下是什么原因。纯源码,控件两个按钮和两个图片框
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_窗口1 | | | | 缩放图片 (图片框1, 1 ) 缩放图片 (图片框2, 2 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 图片 | 字节集 | | | 位图对象 | 位图 | | | 计时 | 整数型 | | |
计时 = 取启动时间 ()位图对象. 载入文件 (取运行目录 () + “\32.BMP”)如果真 (位图对象. 是否为空 ()) 调试输出 (“图片载入失败:” + 位图对象. 取错误信息 ()) 返回 ()图片 = 位图_缩放 (位图对象, 600, 600, 缩放算法 )图片框.图片 = 图片 如果 (缩放算法 = 1 )透明标签1.标题 = “共用时:” + 到文本 (取启动时间 () - 计时 )透明标签2.标题 = “共用时:” + 到文本 (取启动时间 () - 计时 ) |
位图_缩放 | 字节集 | | |
位图对象 | 位图 | | | | 目标宽度 | 整数型 | | | | 目标高度 | 整数型 | | | | 缩放算法 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 源宽度 | 整数型 | | | 源高度 | 整数型 | | | 位图头 | 字节集 | | | 新图像数据 | 字节集 | | | 源图像数据 | 字节集 | | | x比例 | 小数型 | | | y比例 | 小数型 | | | 源x | 整数型 | | | 源y | 整数型 | | | sx | 小数型 | | | sy | 小数型 | | | dx | 小数型 | | | dy | 小数型 | | | 蓝色 | 字节型 | | | 绿色 | 字节型 | | | 红色 | 字节型 | | | 透明度 | 字节型 | | | i | 整数型 | | | j | 整数型 | | | 像素位置 | 整数型 | | | x权重 | 小数型 | | 4 | y权重 | 小数型 | | 4 |
源宽度 = 位图对象. 取宽度 ()源高度 = 位图对象. 取高度 ()如果真 (位图对象. 是否为空 () 或 源宽度 = -1 或 源高度 = -1 )调试输出 (“位图对象错误:” + 位图对象. 取错误信息 ()) 返回 ({ })源图像数据 = 位图对象. 取像素点阵 ()位图头 = 取字节集左边 (位图对象. 取位图数据 (), 取字节集内整数 (位图对象. 取位图数据 (), 14, ) + 14 ) 置字节集内整数 (位图头, 2, 目标宽度 × 目标高度 × 4 + 取字节集长度 (位图头 ), )置字节集内整数 (位图头, 18, 目标宽度, )置字节集内整数 (位图头, 22, 目标高度, )置字节集内整数 (位图头, 34, 目标宽度 × 目标高度 × 4, )x比例 = 源宽度 ÷ 目标宽度 y比例 = 源高度 ÷ 目标高度 新图像数据 = 取空白字节集 (目标宽度 × 目标高度 × 4 )计次循环首 (目标高度, j )sy = (j - 1 + 0.5 ) × y比例 - 0.5 源y = 取整 (sy )dy = sy - 源y 如果 (缩放算法 = 2 ) 双三次插值_取权重 (dy, y权重 )计次循环首 (目标宽度, i )sx = (i - 1 + 0.5 ) × x比例 - 0.5 源x = 取整 (sx )dx = sx - 源x 如果 (缩放算法 = 2 ) 双三次插值_取权重 (dx, x权重 )计算双三次插值像素 (x权重, y权重, 源x, 源y, 源宽度, 源高度, 源图像数据, 红色, 绿色, 蓝色, 透明度 )计算双线性插值像素 (dx, dy, 源x, 源y, 源宽度, 源高度, 源图像数据, 红色, 绿色, 蓝色, 透明度 )像素位置 = ( (j - 1 ) × 目标宽度 + i - 1 ) × 4 新图像数据 [像素位置 ] = 蓝色 新图像数据 [像素位置 + 1 ] = 绿色 新图像数据 [像素位置 + 2 ] = 红色 新图像数据 [像素位置 + 3 ] = 透明度 计次循环尾 ()计次循环尾 ()返回 (位图头 + 新图像数据 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 常数 | 小数型 | | | 临时值 | 小数型 | | 4 | i | 整数型 | | | x | 小数型 | | |
常数 = -0.5 临时值 [1 ] = 1 + 坐标差 临时值 [2 ] = 坐标差 临时值 [3 ] = 1 - 坐标差 临时值 [4 ] = 2 - 坐标差 重定义数组 (返回权重, 假, 4 )计次循环首 (4, i )x = 取绝对值 (临时值 [i ])判断 (x ≤ 1 )返回权重 [i ] = (常数 + 2 ) × 求次方 (x, 3 ) (常数 + 3 ) × 求次方 (x, 2 ) + 1 判断 (x > 1 且 x < 2 )返回权重 [i ] = 常数 × 求次方 (x, 3 ) - 5 × 常数 × 求次方 (x, 2 ) + 8 × 常数 × x - 4 × 常数 返回权重 [i ] = 0 计次循环尾 ()|
计算双三次插值像素 | | | |
x权重 | 小数型 | | | | y权重 | 小数型 | | | | x | 整数型 | | | | y | 整数型 | | | | 源宽度 | 整数型 | | | | 源高度 | 整数型 | | | | 源图像数据 | 字节集 | | | | 返回R | 字节型 | | | | 返回G | 字节型 | | | | 返回B | 字节型 | | | | 返回A | 字节型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | j | 整数型 | | | 红色 | 小数型 | | | 绿色 | 小数型 | | | 蓝色 | 小数型 | | | 透明度 | 小数型 | | | 像素位置 | 整数型 | | | 当前x | 整数型 | | | 当前y | 整数型 | | | 计次循环首 (4, j )当前y = 限制范围 (y + j - 2, 0, 源高度 - 1 )计次循环首 (4, i )当前x = 限制范围 (x + i - 2, 0, 源宽度 - 1 )像素位置 = (当前y × 源宽度 + 当前x ) × 4 蓝色 = 蓝色 + x权重 [i ] × y权重 [j ] × 源图像数据 [像素位置 ]绿色 = 绿色 + x权重 [i ] × y权重 [j ] × 源图像数据 [像素位置 + 1 ]红色 = 红色 + x权重 [i ] × y权重 [j ] × 源图像数据 [像素位置 + 2 ]透明度 = 透明度 + x权重 [i ] × y权重 [j ] × 源图像数据 [像素位置 + 3 ]计次循环尾 ()计次循环尾 ()返回R = 限制范围 (取整 (红色 ), 0, 255 )返回G = 限制范围 (取整 (绿色 ), 0, 255 )返回B = 限制范围 (取整 (蓝色 ), 0, 255 )返回A = 限制范围 (取整 (透明度 ), 0, 255 )|
计算双线性插值像素 | | | |
x权重 | 小数型 | | | | y权重 | 小数型 | | | | x | 整数型 | | | | y | 整数型 | | | | 源宽度 | 整数型 | | | | 源高度 | 整数型 | | | | 源图像数据 | 字节集 | | | | 返回R | 字节型 | | | | 返回G | 字节型 | | | | 返回B | 字节型 | | | | 返回A | 字节型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | j | 整数型 | | | 红色 | 小数型 | | | 绿色 | 小数型 | | | 蓝色 | 小数型 | | | 透明度 | 小数型 | | | 像素位置 | 整数型 | | | 当前x | 整数型 | | | 当前y | 整数型 | | | 权重 | 小数型 | | 4 |
权重 [1 ] = (1 - x权重 ) (1 - y权重 )权重 [2 ] = x权重 (1 - y权重 )权重 [3 ] = (1 - x权重 ) × y权重 权重 [4 ] = x权重 × y权重 计次循环首 (2, j )当前y = 限制范围 (y + j - 1, 0, 源高度 - 1 )计次循环首 (2, i )当前x = 限制范围 (x + i - 1, 0, 源宽度 - 1 )像素位置 = (当前y × 源宽度 + 当前x ) × 4 蓝色 = 蓝色 + 权重 [ (j - 1 ) × 2 + i ] × 源图像数据 [像素位置 ]绿色 = 绿色 + 权重 [ (j - 1 ) × 2 + i ] × 源图像数据 [像素位置 + 1 ]红色 = 红色 + 权重 [ (j - 1 ) × 2 + i ] × 源图像数据 [像素位置 + 2 ]透明度 = 透明度 + 权重 [ (j - 1 ) × 2 + i ] × 源图像数据 [像素位置 + 3 ]计次循环尾 ()计次循环尾 ()返回R = 限制范围 (取整 (红色 ), 0, 255 )返回G = 限制范围 (取整 (绿色 ), 0, 255 )返回B = 限制范围 (取整 (蓝色 ), 0, 255 )返回A = 限制范围 (取整 (透明度 ), 0, 255 )|
限制范围 | 整数型 | | |
被限制值 | 整数型 | | | | 最小值 | 整数型 | | | | 最大值 | 整数型 | | | | 如果 (被限制值 < 最小值 )返回 (最小值 )如果 (被限制值 > 最大值 )返回 (最大值 )返回 (被限制值 )
|