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

从F到0 - From F to 0

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

易语言 两种算法实现将彩色位图转换到黑白灰度位图滤镜 (返回位图)

[复制链接]
发表于 2021-3-24 20:16:47 | 显示全部楼层 |阅读模式
输入图片:
in.png
(R+G+B)/3 滤镜算法:
out.png
R*0.299+G*0.587+B*0.114 滤镜算法
out2.png
  1. .版本 2
  2. .支持库 BmpOperate

  3. .程序集 程序集1, , , 2021-03-21

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


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

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

  9. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  10. .如果真 (位图.载入文件 (“in.bmp”) = 假)
  11.     信息框 (位图.取错误信息 (), 0, , )
  12.     结束 ()
  13. .如果真结束
  14. 写到文件 (“out.bmp”, 位图_黑白 (位图).取位图数据 ())
  15. 写到文件 (“out2.bmp”, 位图_黑白2 (位图).取位图数据 ())



  16. .子程序 位图_黑白, 位图, 公开, (R+G+B)/3 算法
  17. .参数 位图, 位图
  18. .局部变量 宽, 整数型
  19. .局部变量 高, 整数型
  20. .局部变量 X, 整数型
  21. .局部变量 Y, 整数型
  22. .局部变量 返回值, 位图
  23. .局部变量 颜色, 整数型

  24. 宽 = 位图.取宽度 ()
  25. 高 = 位图.取高度 ()
  26. 返回值.创建 (宽, 高, 位图.取位深度 (), )
  27. .变量循环首 (0, 宽 - 1, 1, X)
  28.     .变量循环首 (0, 高 - 1, 1, Y)
  29.         颜色 = 位图.取某点颜色 (X, Y)
  30.         返回值.置某点颜色 (X, Y, 取颜色值_灰度 ((取红色值 (颜色) + 取绿色值 (颜色) + 取蓝色值 (颜色)) ÷ 3))
  31.     .变量循环尾 ()
  32. .变量循环尾 ()
  33. 返回 (返回值)

  34. .子程序 位图_黑白2, 位图, 公开, R*0.299+G*0.587+B*0.114 算法
  35. .参数 位图, 位图
  36. .局部变量 宽, 整数型
  37. .局部变量 高, 整数型
  38. .局部变量 X, 整数型
  39. .局部变量 Y, 整数型
  40. .局部变量 返回值, 位图
  41. .局部变量 颜色, 整数型

  42. 宽 = 位图.取宽度 ()
  43. 高 = 位图.取高度 ()
  44. 返回值.创建 (宽, 高, 位图.取位深度 (), )
  45. .变量循环首 (0, 宽 - 1, 1, X)
  46.     .变量循环首 (0, 高 - 1, 1, Y)
  47.         颜色 = 位图.取某点颜色 (X, Y)
  48.         返回值.置某点颜色 (X, Y, 取颜色值_灰度 (取红色值 (颜色) × 0.299 + 取绿色值 (颜色) × 0.587 + 取蓝色值 (颜色) × 0.114))
  49.     .变量循环尾 ()
  50. .变量循环尾 ()
  51. 返回 (返回值)

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

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

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

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

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

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

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

  80. 置入代码 ({ 51, 192, 138, 69, 8, 193, 224, 8, 138, 69, 8, 193, 224, 8, 138, 69, 8, 201, 194, 4, 0 })
  81. ' xor eax,eax
  82. ' mov al,[ebp+8]
  83. ' shl eax,8
  84. ' mov al,[ebp+8]
  85. ' shl eax,8
  86. ' mov al,[ebp+8]
  87. ' leave
  88. ' retn 4
  89. 返回 (0)
复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-3-19 15:19 , Processed in 0.392023 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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