设为首页收藏本站帮助中心
查看: 964|回复: 0
收起左侧

易语言实现位图的熔铸滤镜算法 (返回位图)

[复制链接]
发表于 2021-3-13 22:17:32 | 显示全部楼层 |阅读模式
输入图片:
in.png
滤镜效果:
out.png
  1. .版本 2
  2. .支持库 BmpOperate

  3. .程序集 程序集1

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


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

  7. .子程序 _临时子程序
  8. .局部变量 位图, 位图

  9. .如果真 (位图.载入文件 (“in.bmp”) = 假)
  10.     信息框 (位图.取错误信息 (), 0, , )
  11.     结束 ()
  12. .如果真结束
  13. 写到文件 (“out.bmp”, 位图_熔铸滤镜 (位图).取位图数据 ())

  14. .子程序 位图_熔铸滤镜, 位图
  15. .参数 位图, 位图
  16. .局部变量 宽, 整数型
  17. .局部变量 高, 整数型
  18. .局部变量 X, 整数型
  19. .局部变量 Y, 整数型
  20. .局部变量 返回值, 位图

  21. 宽 = 位图.取宽度 ()
  22. 高 = 位图.取高度 ()
  23. 返回值.创建 (宽, 高, 位图.取位深度 (), #绿色)
  24. .变量循环首 (0, 宽 - 1, 1, X)
  25.     .变量循环首 (0, 高 - 1, 1, Y)
  26.         返回值.置某点颜色 (X, Y, 颜色_熔铸滤镜 (位图.取某点颜色 (X, Y)))
  27.     .变量循环尾 ()
  28. .变量循环尾 ()
  29. 返回 (返回值)


  30. .子程序 颜色_熔铸滤镜, 整数型
  31. .参数 颜色, 整数型
  32. .局部变量 R, 字节型
  33. .局部变量 G, 字节型
  34. .局部变量 B, 字节型
  35. .局部变量 RR, 双精度小数型
  36. .局部变量 GG, 双精度小数型
  37. .局部变量 BB, 双精度小数型

  38. R = 取红色值 (颜色)
  39. G = 取绿色值 (颜色)
  40. B = 取蓝色值 (颜色)
  41. RR = R × 128 ÷ (G + B + 1)
  42. GG = G × 128 ÷ (R + B + 1)
  43. BB = B × 128 ÷ (G + R + 1)
  44. RR = 双精度小数型_限制大小 (RR, 0, 255)
  45. GG = 双精度小数型_限制大小 (GG, 0, 255)
  46. BB = 双精度小数型_限制大小 (BB, 0, 255)
  47. 返回 (取颜色值 (RR, GG, BB))


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

  50. 置入代码 ({ 139, 69, 8, 37, 255, 0, 0, 0, 201, 194, 4, 0 })
  51. ' mov eax,[ebp+8]
  52. ' and eax,255
  53. ' leave
  54. ' retn 4
  55. 返回 (0)

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

  58. 置入代码 ({ 139, 69, 8, 193, 232, 8, 37, 255, 0, 0, 0, 201, 194, 4, 0 })
  59. ' mov eax,[ebp+8]
  60. ' shr eax,8
  61. ' and eax,255
  62. ' leave
  63. ' retn 4
  64. 返回 (0)

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

  67. 置入代码 ({ 139, 69, 8, 193, 232, 16, 37, 255, 0, 0, 0, 201, 194, 4, 0 })
  68. ' mov eax,[ebp+8]
  69. ' shr eax,16
  70. ' and eax,255
  71. ' leave
  72. ' retn 4
  73. 返回 (0)

  74. .子程序 双精度小数型_限制大小, 双精度小数型
  75. .参数 值, 双精度小数型
  76. .参数 最小值, 双精度小数型, , 值小于最小值,返回最小值
  77. .参数 最大值, 双精度小数型, , 值大于最大值,返回最大值

  78. 返回 (选择 (值 < 最小值, 最小值, 选择 (值 > 最大值, 最大值, 值)))

复制代码

相关帖子

回复

使用道具 举报

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

本版积分规则