设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 加入我们
搜索
查看: 2571|回复: 2
收起左侧

易语言实现将图片转换成黑板画滤镜、黑白彩色粉笔画黑板报生成器 (返回位图)

[复制链接]
发表于 2021-3-18 22:25:31 | 显示全部楼层 |阅读模式
输入图片:
输入.png
彩色滤镜:
彩色.png
黑白滤镜:
黑白.png

  1. .版本 2
  2. .支持库 BmpOperate

  3. .程序集 程序集1
  4. .程序集变量 常量_颜色最远, 双精度小数型

  5. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

  6. 常量_颜色最远 = 取颜色相似度 (#黑色, #白色)

  7. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  8. 返回 (0)  ' 可以根据您的需要返回任意数值

  9. .子程序 _临时子程序
  10. .局部变量 位图, 位图
  11. .局部变量 时间, 整数型

  12. 位图.载入文件 (“in.bmp”)
  13. 时间 = 取启动时间 ()
  14. 写到文件 (“out.bmp”, 位图_变黑板画 (位图, 假, 真).取位图数据 ())
  15. 输出调试文本 (“处理耗时:” + 到文本 (取启动时间 () - 时间) + “毫秒”)

  16. .子程序 位图_变黑板画, 位图, 公开
  17. .参数 位图, 位图
  18. .参数 彩色, 逻辑型, 可空
  19. .参数 鲜艳, 逻辑型, 可空
  20. .局部变量 宽, 整数型
  21. .局部变量 X, 整数型
  22. .局部变量 高, 整数型
  23. .局部变量 Y, 整数型
  24. .局部变量 颜色表, 整数型, , "4"
  25. .局部变量 返回值, 位图
  26. .局部变量 颜色, 整数型
  27. .局部变量 红最大, 字节型
  28. .局部变量 绿最大, 字节型
  29. .局部变量 蓝最大, 字节型
  30. .局部变量 红, 字节型
  31. .局部变量 绿, 字节型
  32. .局部变量 蓝, 字节型

  33. 宽 = 位图.取宽度 ()
  34. 高 = 位图.取高度 ()
  35. 返回值.创建 (宽, 高, 位图.取位深度 (), )
  36. .变量循环首 (0, 宽 - 2, 1, X)
  37.     .变量循环首 (0, 高 - 2, 1, Y)
  38.         颜色表 [1] = 位图.取某点颜色 (X, Y)
  39.         颜色表 [2] = 位图.取某点颜色 (X + 1, Y)
  40.         颜色表 [3] = 位图.取某点颜色 (X, Y + 1)
  41.         颜色表 [4] = 位图.取某点颜色 (X + 1, Y + 1)
  42.         .如果 (彩色)
  43.             颜色 = 颜色表算法_彩色 (颜色表)
  44.         .否则
  45.             颜色 = 颜色表算法_黑白 (颜色表)
  46.         .如果结束
  47.         .如果真 (鲜艳)
  48.             红最大 = 字节型_取最大值 (红最大, 取红色值 (颜色))
  49.             绿最大 = 字节型_取最大值 (绿最大, 取绿色值 (颜色))
  50.             蓝最大 = 字节型_取最大值 (蓝最大, 取蓝色值 (颜色))

  51.         .如果真结束
  52.         返回值.置某点颜色 (X, Y, 颜色)
  53.     .变量循环尾 ()
  54. .变量循环尾 ()
  55. .变量循环首 (0, 宽 - 2, 1, X)
  56.     返回值.置某点颜色 (X, 高 - 1, 返回值.取某点颜色 (X, 高 - 2))
  57. .变量循环尾 ()
  58. .变量循环首 (0, 高 - 2, 1, Y)
  59.     返回值.置某点颜色 (宽 - 1, Y, 返回值.取某点颜色 (宽 - 2, Y))
  60. .变量循环尾 ()
  61. 返回值.置某点颜色 (宽 - 1, 高 - 1, 返回值.取某点颜色 (宽 - 2, 高 - 2))
  62. .如果真 (鲜艳)
  63.     .变量循环首 (0, 宽 - 1, 1, X)
  64.         .变量循环首 (0, 高 - 1, 1, Y)
  65.             颜色 = 返回值.取某点颜色 (X, Y)
  66.             红 = 取红色值 (颜色) ÷ 红最大 × 255
  67.             绿 = 取绿色值 (颜色) ÷ 绿最大 × 255
  68.             蓝 = 取蓝色值 (颜色) ÷ 蓝最大 × 255
  69.             返回值.置某点颜色 (X, Y, 取颜色值 (红, 绿, 蓝))
  70.         .变量循环尾 ()
  71.     .变量循环尾 ()
  72. .如果真结束
  73. 返回 (返回值)


  74. .子程序 颜色表算法_黑白, 整数型
  75. .参数 颜色表, 整数型, 数组
  76. .局部变量 总和, 双精度小数型
  77. .局部变量 外循环, 整数型
  78. .局部变量 内循环, 整数型
  79. .局部变量 除数, 整数型

  80. .计次循环首 (4, 外循环)
  81.     .计次循环首 (4, 内循环)
  82.         .如果真 (外循环 ≠ 内循环)
  83.             总和 = 总和 + 取颜色相似度 (颜色表 [外循环], 颜色表 [内循环])
  84.             除数 = 除数 + 1
  85.         .如果真结束

  86.     .计次循环尾 ()
  87. .计次循环尾 ()
  88. 返回 (取颜色值_灰度 (总和 ÷ 除数 ÷ 常量_颜色最远 × 255))


  89. .子程序 颜色表算法_彩色, 整数型
  90. .参数 颜色表, 整数型, 数组
  91. .局部变量 外循环, 整数型
  92. .局部变量 内循环, 整数型
  93. .局部变量 除数, 整数型
  94. .局部变量 红, 双精度小数型
  95. .局部变量 绿, 双精度小数型
  96. .局部变量 蓝, 双精度小数型

  97. .计次循环首 (4, 外循环)
  98.     .计次循环首 (4, 内循环)
  99.         .如果真 (外循环 ≠ 内循环)
  100.             红 = 红 + 取绝对值 (取红色值 (颜色表 [外循环]) - 取红色值 (颜色表 [内循环]))
  101.             绿 = 绿 + 取绝对值 (取绿色值 (颜色表 [外循环]) - 取绿色值 (颜色表 [内循环]))
  102.             蓝 = 蓝 + 取绝对值 (取蓝色值 (颜色表 [外循环]) - 取蓝色值 (颜色表 [内循环]))
  103.             除数 = 除数 + 1
  104.         .如果真结束

  105.     .计次循环尾 ()
  106. .计次循环尾 ()
  107. 返回 (取颜色值 (红 ÷ 除数, 绿 ÷ 除数, 蓝 ÷ 除数))


  108. .子程序 取颜色相似度, 双精度小数型
  109. .参数 被检测颜色, 整数型
  110. .参数 检测的颜色, 整数型

  111. 返回 (求平方根 (求次方 (取红色值 (被检测颜色) - 取红色值 (检测的颜色), 2) + 求次方 (取绿色值 (被检测颜色) - 取绿色值 (检测的颜色), 2) + 求次方 (取蓝色值 (被检测颜色) - 取蓝色值 (检测的颜色), 2)))




  112. .子程序 取红色值, 字节型
  113. .参数 颜色值, 整数型

  114. 置入代码 ({ 139, 69, 8, 37, 255, 0, 0, 0, 201, 194, 4, 0 })
  115. ' mov eax,[ebp+8]
  116. ' and eax,255
  117. ' leave
  118. ' retn 4
  119. 返回 (0)

  120. .子程序 取绿色值, 字节型
  121. .参数 颜色值, 整数型

  122. 置入代码 ({ 139, 69, 8, 193, 232, 8, 37, 255, 0, 0, 0, 201, 194, 4, 0 })
  123. ' mov eax,[ebp+8]
  124. ' shr eax,8
  125. ' and eax,255
  126. ' leave
  127. ' retn 4
  128. 返回 (0)

  129. .子程序 取蓝色值, 字节型
  130. .参数 颜色值, 整数型

  131. 置入代码 ({ 139, 69, 8, 193, 232, 16, 37, 255, 0, 0, 0, 201, 194, 4, 0 })
  132. ' mov eax,[ebp+8]
  133. ' shr eax,16
  134. ' and eax,255
  135. ' leave
  136. ' retn 4
  137. 返回 (0)

  138. .子程序 取颜色值_灰度, 整数型, , 置入代码:返回 (取颜色值 (灰度, 灰度, 灰度))
  139. .参数 灰度, 字节型, , 数值范围从 0 到 255,表示颜色中的灰度成份。

  140. 置入代码 ({ 51, 192, 138, 69, 8, 193, 224, 8, 138, 69, 8, 193, 224, 8, 138, 69, 8, 201, 194, 4, 0 })
  141. ' xor eax,eax
  142. ' mov al,[ebp+8]
  143. ' shl eax,8
  144. ' mov al,[ebp+8]
  145. ' shl eax,8
  146. ' mov al,[ebp+8]
  147. ' leave
  148. ' retn 4
  149. 返回 (0)

  150. .子程序 字节型_取最大值, 字节型, , A和B谁大返回谁
  151. .参数 A, 字节型
  152. .参数 B, 字节型

  153. 置入代码 ({ 138, 69, 8, 138, 101, 12, 56, 196, 118, 2, 138, 196, 15, 182, 192, 201, 194, 8, 0 })
  154. ' mov al,[ebp+8]
  155. ' mov ah,[ebp+12]
  156. ' .if ah > al
  157. ' mov al,ah
  158. ' .endif
  159. ' movzx eax,al
  160. ' leave
  161. ' retn 8
  162. 返回 (0)
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-19 12:55 , Processed in 0.488028 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表