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

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 210|回复: 0
收起左侧

易语言MASM置入代码将24位RGB颜色转换成16位深度颜色 (红5位,绿6位,蓝5位,返回整数型)

[复制链接]
发表于 2023-6-11 19:23:59 | 显示全部楼层 |阅读模式
1.png
  1. .版本 2

  2. .程序集 程序集1

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


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

  6. .子程序 _临时子程序
  7. .局部变量 红, 整数型
  8. .局部变量 绿, 整数型
  9. .局部变量 蓝, 整数型
  10. .局部变量 颜色, 整数型

  11. .变量循环首 (0, 255, 1, 红)
  12.     .变量循环首 (0, 255, 1, 绿)
  13.         .变量循环首 (0, 255, 1, 蓝)
  14.             颜色 = 取颜色值 (红, 绿, 蓝)
  15.             .如果真 (颜色位深度_24位到16位 (颜色) ≠ 颜色位深度_24位到16位_易源码 (颜色))
  16.                 暂停 ()
  17.             .如果真结束

  18.         .变量循环尾 ()
  19.     .变量循环尾 ()
  20. .变量循环尾 ()
  21. 输出调试文本 (“完成”)


  22. .子程序 颜色位深度_24位到16位, 整数型, 公开, 红5位,绿6位,蓝5位 返回值范围:0~65535 失败返回:-1
  23. .参数 颜色值, 整数型, , 范围:0~16777215

  24. 置入代码 ({ 83, 81, 82, 139, 69, 8, 61, 255, 255, 255, 0, 118, 7, 184, 255, 255, 255, 255, 235, 39, 138, 216, 138, 252, 193, 200, 16, 138, 200, 192, 235, 3, 192, 239, 2, 192, 233, 3, 15, 182, 201, 15, 182, 199, 15, 182, 219, 193, 224, 5, 193, 227, 11, 11, 200, 11, 203, 139, 193, 90, 89, 91, 201, 194, 4, 0 })
  25. ' push ebx
  26. ' push ecx
  27. ' push edx
  28. ' mov eax,[ebp+8]
  29. ' .if eax > 16777215
  30. ' mov eax,-1
  31. ' jmp ASM_END
  32. ' .endif
  33. ' mov bl,al
  34. ' mov bh,ah
  35. ' ror eax,16
  36. ' mov cl,al
  37. ' shr bl,3
  38. ' shr bh,2
  39. ' shr cl,3
  40. ' movzx ecx,cl
  41. ' movzx eax,bh
  42. ' movzx ebx,bl
  43. ' shl eax,5
  44. ' shl ebx,11
  45. ' or ecx,eax
  46. ' or ecx,ebx
  47. ' mov eax,ecx
  48. ' ASM_END:
  49. ' pop edx
  50. ' pop ecx
  51. ' pop ebx
  52. ' leave
  53. ' retn 4
  54. 返回 (0)

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

  57. 返回 (位与 (颜色值, 255))

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

  60. 返回 (位与 (右移 (颜色值, 8), 255))

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

  63. 返回 (位与 (右移 (颜色值, 16), 255))

  64. .子程序 颜色位深度_24位到16位_易源码, 整数型
  65. .参数 颜色值, 整数型

  66. .如果真 (颜色值 < 0 或 颜色值 > 16777215)
  67.     返回 (-1)
  68. .如果真结束
  69. 返回 (位或 (右移 (取蓝色值 (颜色值), 3), 左移 (右移 (取绿色值 (颜色值), 2), 5), 左移 (右移 (取红色值 (颜色值), 3), 11)))
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

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

腾讯云安全认证

GMT+8, 2024-4-27 16:42 , Processed in 1.524087 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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