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

易语言实现将位图的RGB颜色三基色 (三原色) 通道分离成3张位图 (返回位图)

[复制链接]
发表于 2021-2-22 19:47:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
本帖最后由 CNWTEPRG 于 2021-2-22 19:46 编辑
输入:
RGB.png
输出(R):
R1.png R2.png
输出(G):
G1.png G2.png
输出(B):
B1.png B2.png
输入:
RGB.png
输出(R):
R1.png R2.png
输出(G):
G1.png G2.png
输出(B):
B1.png B2.png
  1. .版本 2
  2. .支持库 BmpOperate

  3. .程序集 程序集1

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


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

  7. .子程序 _临时子程序
  8. .局部变量 位图, 位图
  9. .局部变量 红, 位图
  10. .局部变量 绿, 位图
  11. .局部变量 蓝, 位图

  12. 位图.载入文件 (“in.bmp”)
  13. 写到文件 (“R1.bmp”, 位图_取红色通道 (位图, 真).取位图数据 ())
  14. 写到文件 (“G1.bmp”, 位图_取绿色通道 (位图, 真).取位图数据 ())
  15. 写到文件 (“B1.bmp”, 位图_取蓝色通道 (位图, 真).取位图数据 ())
  16. 写到文件 (“R2.bmp”, 位图_取红色通道 (位图, 假).取位图数据 ())
  17. 写到文件 (“G2.bmp”, 位图_取绿色通道 (位图, 假).取位图数据 ())
  18. 写到文件 (“B2.bmp”, 位图_取蓝色通道 (位图, 假).取位图数据 ())


  19. .子程序 位图_取红色通道, 位图, 公开
  20. .参数 位图, 位图
  21. .参数 灰色, 逻辑型, 可空
  22. .局部变量 宽, 整数型
  23. .局部变量 高, 整数型
  24. .局部变量 返回值, 位图
  25. .局部变量 X, 整数型
  26. .局部变量 Y, 整数型
  27. .局部变量 颜色表, 整数型, , "256"
  28. .局部变量 灰度, 整数型

  29. 宽 = 位图.取宽度 ()
  30. 高 = 位图.取高度 ()
  31. 返回值.创建 (宽, 高, 8, #黑色)
  32. .变量循环首 (0, 255, 1, 灰度)
  33.     .如果 (灰色)
  34.         颜色表 [灰度 + 1] = 取颜色值_灰度 (灰度)
  35.     .否则
  36.         颜色表 [灰度 + 1] = 取颜色值 (0, 0, 灰度)
  37.     .如果结束

  38. .变量循环尾 ()
  39. 返回值.置颜色表 (颜色表)
  40. .变量循环首 (0, 宽 - 1, 1, X)
  41.     .变量循环首 (0, 高 - 1, 1, Y)
  42.         返回值.置某点颜色索引 (X, Y, 取红色值 (位图.取某点颜色 (X, Y)))
  43.     .变量循环尾 ()
  44. .变量循环尾 ()
  45. 返回 (返回值)



  46. .子程序 位图_取绿色通道, 位图, 公开
  47. .参数 位图, 位图
  48. .参数 灰色, 逻辑型, 可空
  49. .局部变量 宽, 整数型
  50. .局部变量 高, 整数型
  51. .局部变量 返回值, 位图
  52. .局部变量 X, 整数型
  53. .局部变量 Y, 整数型
  54. .局部变量 颜色表, 整数型, , "256"
  55. .局部变量 灰度, 整数型

  56. 宽 = 位图.取宽度 ()
  57. 高 = 位图.取高度 ()
  58. 返回值.创建 (宽, 高, 8, #黑色)
  59. .变量循环首 (0, 255, 1, 灰度)
  60.     .如果 (灰色)
  61.         颜色表 [灰度 + 1] = 取颜色值_灰度 (灰度)
  62.     .否则
  63.         颜色表 [灰度 + 1] = 取颜色值 (0, 灰度, 0)
  64.     .如果结束

  65. .变量循环尾 ()
  66. 返回值.置颜色表 (颜色表)
  67. .变量循环首 (0, 宽 - 1, 1, X)
  68.     .变量循环首 (0, 高 - 1, 1, Y)
  69.         返回值.置某点颜色索引 (X, Y, 取绿色值 (位图.取某点颜色 (X, Y)))
  70.     .变量循环尾 ()
  71. .变量循环尾 ()
  72. 返回 (返回值)



  73. .子程序 位图_取蓝色通道, 位图, 公开
  74. .参数 位图, 位图
  75. .参数 灰色, 逻辑型, 可空
  76. .局部变量 宽, 整数型
  77. .局部变量 高, 整数型
  78. .局部变量 返回值, 位图
  79. .局部变量 X, 整数型
  80. .局部变量 Y, 整数型
  81. .局部变量 颜色表, 整数型, , "256"
  82. .局部变量 灰度, 整数型

  83. 宽 = 位图.取宽度 ()
  84. 高 = 位图.取高度 ()
  85. 返回值.创建 (宽, 高, 8, #黑色)
  86. .变量循环首 (0, 255, 1, 灰度)
  87.     颜色表 [灰度 + 1] = 取颜色值_灰度 (灰度)
  88.     .如果 (灰色)
  89.         颜色表 [灰度 + 1] = 取颜色值_灰度 (灰度)
  90.     .否则
  91.         颜色表 [灰度 + 1] = 取颜色值 (灰度, 0, 0)
  92.     .如果结束

  93. .变量循环尾 ()
  94. 返回值.置颜色表 (颜色表)
  95. .变量循环首 (0, 宽 - 1, 1, X)
  96.     .变量循环首 (0, 高 - 1, 1, Y)
  97.         返回值.置某点颜色索引 (X, Y, 取蓝色值 (位图.取某点颜色 (X, Y)))
  98.     .变量循环尾 ()
  99. .变量循环尾 ()
  100. 返回 (返回值)

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

  103. 置入代码 ({ 51, 192, 138, 69, 8, 193, 224, 8, 138, 69, 8, 193, 224, 8, 138, 69, 8, 201, 194, 4, 0 })
  104. ' xor eax,eax
  105. ' mov al,[ebp+8]
  106. ' shl eax,8
  107. ' mov al,[ebp+8]
  108. ' shl eax,8
  109. ' mov al,[ebp+8]
  110. ' leave
  111. ' retn 4
  112. 返回 (0)

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

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

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

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

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

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

相关帖子

这个小可爱很神秘,什么都没留下
回复

使用道具 举报

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

本版积分规则