递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 306|回复: 2
打印 上一主题 下一主题

[视窗] 易语言的代码用火山怎么写?

[复制链接]

2

主题

7

帖子

34

积分

新手上路

Rank: 1

积分
34
跳转到指定楼层
楼主
发表于 昨天 01:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
.版本 2

.子程序 图片_取图片区域, 字节集, 公开, 提供一张图片,取出指定位置大小的图片。
.参数 原位图, 字节集, , 24位BMP位图
.参数 图片左边, 整数型, , 欲取出的图片左边
.参数 图片顶边, 整数型, , 欲取出的图片顶边
.参数 图片宽度, 整数型, , 欲取出的图片宽度
.参数 图片高度, 整数型, , 欲取出的图片高度
.局部变量 图像宽度, 整数型
.局部变量 图像高度, 整数型
.局部变量 图像位数, 整数型
.局部变量 图像压缩, 整数型
.局部变量 新位图, 字节集
.局部变量 新位图信息头, BITMAPINFOHEADER
.局部变量 新位图文件头, BITMAPFILEHEADER
.局部变量 文件长度, 整数型
.局部变量 i, 整数型
.局部变量 颜色点阵偏移量, 整数型
.局部变量 点的大小, 整数型
.局部变量 颜色表, 字节集
.局部变量 总数据偏移, 整数型
.局部变量 新行宽, 整数型
.局部变量 原行宽, 整数型
.局部变量 时间, 整数型

图像宽度 = 取字节集数据 (取字节集中间 (原位图, 19, 4), #整数型, )
图像高度 = 取字节集数据 (取字节集中间 (原位图, 23, 4), #整数型, )
图像位数 = 取字节集数据 (取字节集中间 (原位图, 29, 2), #短整数型, )
图像压缩 = 取字节集数据 (取字节集中间 (原位图, 31, 4), #整数型, )
.如果真 (图像压缩 ≠ 0)
    返回 ({  })
.如果真结束
.如果真 (图像位数 = 32)
    颜色点阵偏移量 = 54
    点的大小 = 4
.如果真结束
.如果真 (图像位数 = 24)
    颜色点阵偏移量 = 54
    点的大小 = 3
.如果真结束
.如果真 (图像位数 = 16)
    颜色点阵偏移量 = 54
    点的大小 = 2
.如果真结束
.如果真 (图像位数 = 8)
    颜色点阵偏移量 = 1078
    点的大小 = 1
    颜色表 = 取字节集中间 (原位图, 55, 1024)
.如果真结束
.如果真 (图像位数 < 8)
    输出调试文本 (“错误! 图像位深小于8!”)
    返回 ({  })
.如果真结束
'
'

.如果真 (图片左边 < 0)
    图片左边 = 0
.如果真结束
.如果真 (图片顶边 < 0)
    图片顶边 = 0
.如果真结束
.如果真 (图片左边 > 图像宽度 或 图片顶边 > 图像高度)
    输出调试文本 (“参数错误,错误原因:图片左边或图片顶边小于截取出来图片的宽度或高度”)
    返回 ({  })
.如果真结束
.如果真 (图片宽度 ≤ 0 或 图片高度 ≤ 0)
    输出调试文本 (“参数错误,错误原因:图片宽度或图片高度小于等于0”)
    返回 ({  })
.如果真结束
.如果真 (图片左边 + 图片宽度 > 图像宽度)
    图片宽度 = 图像宽度 - 图片左边
.如果真结束
.如果真 (图片顶边 + 图片高度 > 图像高度)
    图片高度 = 图像高度 - 图片顶边
.如果真结束

原行宽 = 左移 (右移 (图像宽度 × 图像位数 + 31, 5), 2)
新行宽 = 左移 (右移 (图片宽度 × 图像位数 + 31, 5), 2)
文件长度 = 新行宽 × 图片高度
新位图 = 取空白字节集 (文件长度 + 54 + 取字节集长度 (颜色表))
新位图文件头.bfType = 19778
新位图文件头.bfOffBits = 颜色点阵偏移量
新位图文件头.bfSize = 颜色点阵偏移量 + 文件长度
RtlMoveMemory_BITMAPFILEHEADER_字节型 (新位图 [1], 新位图文件头, 14)
新位图信息头.biSize = 40
新位图信息头.biWidth = 图片宽度
新位图信息头.biHeight = 图片高度
新位图信息头.biPlanes = 1
新位图信息头.biBitCount = 图像位数
RtlMoveMemory_BITMAPINFOHEADER (新位图 [15], 新位图信息头, 40)
.如果真 (图像位数 = 8)
    RtlMoveMemory_字节型 (新位图 [55], 颜色表 [1], 1024)
.如果真结束
总数据偏移 = 原行宽 × (图像高度 - 图片高度 - 图片顶边) + 图片左边 × 点的大小  '
.计次循环首 (图片高度, i)
    RtlMoveMemory_字节型 (新位图 [(i - 1) × 新行宽 + 颜色点阵偏移量 + 1], 原位图 [颜色点阵偏移量 + 总数据偏移 + (i - 1) × 原行宽 + 1], 新行宽)
.计次循环尾 ()
返回 (新位图)




.版本 2

.DLL命令 RtlMoveMemory_BITMAPFILEHEADER_字节型, , "kernel32.dll", "RtlMoveMemory", 公开
    .参数 Dest, 字节型, 传址
    .参数 Src, BITMAPFILEHEADER
    .参数 len, 整数型

.DLL命令 RtlMoveMemory_BITMAPINFOHEADER, , "kernel32.dll", "RtlMoveMemory", 公开
    .参数 Dest, 字节型, 传址
    .参数 Src, BITMAPINFOHEADER
    .参数 len, 整数型


.DLL命令 RtlMoveMemory_字节型, , "kernel32.dll", "RtlMoveMemory", 公开, 复制内存数据_MIB_IPFORWARDROW参数
    .参数 Destination, 字节型, 传址, 目标地址
    .参数 Source, 字节型, 传址, 要复制的数据MIB_IPFORWARDROW
    .参数 Length, 整数型, , 长度






.版本 2

.数据类型 BITMAPINFOHEADER
    .成员 biSize, 整数型
    .成员 biWidth, 整数型
    .成员 biHeight, 整数型
    .成员 biPlanes, 短整数型
    .成员 biBitCount, 短整数型
    .成员 biCompression, 整数型
    .成员 biSizeImage, 整数型
    .成员 biXPelsPerMeter, 整数型
    .成员 biYPelsPerMeter, 整数型
    .成员 biClrUsed, 整数型
    .成员 biClrImportant, 整数型

.数据类型 BITMAPFILEHEADER
    .成员 bfType, 短整数型
    .成员 bfSize, 整数型
    .成员 bfReserved1, 短整数型
    .成员 bfReserved2, 短整数型
    .成员 bfOffBits, 整数型



这个代码用火山怎么写?


回复

使用道具 举报

28

主题

2122

帖子

7718

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7718
沙发
发表于 昨天 12:21 | 只看该作者
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 类 LPBITMAPINFOHEADER <公开 基础类 = 本地结构指针模板 折叠 @别名 = "LPBITMAPINFOHEADER" @模板实现类 = "">
  3. {
  4.     变量 biSize <公开 类型 = 整数 @输出名 = "biSize">
  5.     变量 biWidth <公开 类型 = 整数 @输出名 = "biWidth">
  6.     变量 biHeight <公开 类型 = 整数 @输出名 = "biHeight">
  7.     变量 biPlanes <公开 类型 = 短整数 @输出名 = "biPlanes">
  8.     变量 biBitCount <公开 类型 = 短整数 @输出名 = "biBitCount">
  9.     变量 biCompression <公开 类型 = 整数 @输出名 = "biCompression">
  10.     变量 biSizeImage <公开 类型 = 整数 @输出名 = "biSizeImage">
  11.     变量 biXPelsPerMeter <公开 类型 = 整数 @输出名 = "biXPelsPerMeter">
  12.     变量 biYPelsPerMeter <公开 类型 = 整数 @输出名 = "biYPelsPerMeter">
  13.     变量 biClrUsed <公开 类型 = 整数 @输出名 = "biClrUsed">
  14.     变量 biClrImportant <公开 类型 = 整数 @输出名 = "biClrImportant">
  15. }

  16. 类 LPBITMAPFILEHEADER <公开 基础类 = 本地结构指针模板 折叠 @别名 = "LPBITMAPFILEHEADER" @模板实现类 = "">
  17. {
  18.     变量 bfType <公开 类型 = 短整数 @输出名 = "bfType">
  19.     变量 bfSize <公开 类型 = 整数 @输出名 = "bfSize">
  20.     变量 bfReserved1 <公开 类型 = 短整数 @输出名 = "bfReserved1">
  21.     变量 bfReserved2 <公开 类型 = 短整数 @输出名 = "bfReserved2">
  22.     变量 bfOffBits <公开 类型 = 整数 @输出名 = "bfOffBits">

  23.     #
  24. }

  25. 类 案例 <公开 折叠>
  26. {
  27.     方法 图片_取图片区域 <公开 静态 类型 = 字节集类 注释 = "提供一张图片,取出指定位置大小的图片。">
  28.     参数 原位图 <类型 = 字节集类 注释 = "24位BMP位图">
  29.     参数 图片左边 <类型 = 整数 注释 = "欲取出的图片左边">
  30.     参数 图片顶边 <类型 = 整数 注释 = "欲取出的图片顶边">
  31.     参数 图片宽度 <类型 = 整数 注释 = "欲取出的图片宽度">
  32.     参数 图片高度 <类型 = 整数 注释 = "欲取出的图片高度">
  33.     {
  34.         变量 新位图 <类型 = 字节集类>
  35.         如果 (原位图.取字节集长度 () < LPBITMAPFILEHEADER.取数据尺寸 () + LPBITMAPINFOHEADER.取数据尺寸 ())
  36.         {
  37.             返回 (新位图)
  38.         }
  39.         变量 位图文件 <类型 = LPBITMAPFILEHEADER>
  40.         变量 位图信息 <类型 = LPBITMAPINFOHEADER>
  41.         位图文件 = LPBITMAPFILEHEADER.来自变整数 (原位图.取字节集指针 ())
  42.         位图信息 = LPBITMAPINFOHEADER.来自变整数 (原位图.取字节集指针 () + LPBITMAPFILEHEADER.取数据尺寸 ())
  43.         如果 (位图文件.bfSize != (无符号整数)原位图.取字节集长度 () || 位图信息.biCompression != 0)
  44.         {
  45.             返回 (新位图)
  46.         }
  47.         变量 颜色表 <类型 = 字节集类>
  48.         变量 颜色点阵偏移量 <类型 = 整数>
  49.         变量 点的大小 <类型 = 整数>
  50.         如果 (位图信息.biBitCount == 32)
  51.         {
  52.             颜色点阵偏移量 = 位图文件.bfOffBits
  53.             点的大小 = 4
  54.         }
  55.         否则 (位图信息.biBitCount == 24)
  56.         {
  57.             颜色点阵偏移量 = 位图文件.bfOffBits
  58.             点的大小 = 3
  59.         }
  60.         否则 (位图信息.biBitCount == 16)
  61.         {
  62.             颜色点阵偏移量 = 位图文件.bfOffBits
  63.             点的大小 = 2
  64.         }
  65.         否则 (位图信息.biBitCount == 8)
  66.         {
  67.             颜色点阵偏移量 = 1078
  68.             点的大小 = 1
  69.             颜色表 = 原位图.取字节集中间 (位图文件.bfOffBits, 1024)
  70.         }
  71.         否则
  72.         {
  73.             调试输出 ("错误! 图像位深小于8!")
  74.             返回 (新位图)
  75.         }

  76.         如果 (图片左边 < 0)
  77.         {
  78.             图片左边 = 0
  79.         }
  80.         如果 (图片顶边 < 0)
  81.         {
  82.             图片顶边 = 0
  83.         }
  84.         如果 (图片左边 > 位图信息.biWidth || 图片顶边 > 位图信息.biHeight)
  85.         {
  86.             调试输出 ("参数错误,错误原因:图片左边或图片顶边小于截取出来图片的宽度或高度")
  87.             返回 (新位图)
  88.         }
  89.         如果 (图片宽度 <= 0 || 图片高度 <= 0)
  90.         {
  91.             调试输出 ("参数错误,错误原因:图片左边或图片顶边小于截取出来图片的宽度或高度")
  92.         }
  93.         如果 (图片左边 + 图片宽度 > 位图信息.biWidth)
  94.         {
  95.             图片宽度 = 位图信息.biWidth - 图片左边
  96.         }
  97.         如果 (图片顶边 + 图片高度 > 位图信息.biHeight)
  98.         {
  99.             图片高度 = 位图信息.biHeight - 图片顶边
  100.         }

  101.         变量 新行宽 <类型 = 整数>
  102.         变量 原行宽 <类型 = 整数>
  103.         变量 文件长度 <类型 = 整数>
  104.         原行宽 = 位左移 (位右移 (位图信息.biWidth * 位图信息.biBitCount + 31, 5), 2)
  105.         新行宽 = 位左移 (位右移 (图片宽度 * 位图信息.biBitCount + 31, 5), 2)
  106.         文件长度 = 新行宽 * 图片高度
  107.         新位图.分配字节集 (文件长度 + LPBITMAPFILEHEADER.取数据尺寸 () + LPBITMAPINFOHEADER.取数据尺寸 () + 颜色表.取字节集长度 (), 真)
  108.         变量 新位图文件 <类型 = LPBITMAPFILEHEADER>
  109.         新位图文件 = LPBITMAPFILEHEADER.来自变整数 (新位图.取字节集指针 ())
  110.         新位图文件.bfType = 位图文件.bfType
  111.         新位图文件.bfOffBits = 颜色点阵偏移量
  112.         新位图文件.bfSize = 颜色点阵偏移量 + 文件长度
  113.         变量 新位图信息 <类型 = LPBITMAPINFOHEADER>
  114.         新位图信息 = LPBITMAPINFOHEADER.来自变整数 (新位图.取字节集指针 () + LPBITMAPFILEHEADER.取数据尺寸 ())
  115.         内存复制 (新位图信息.取变整数指针 (), 位图信息.取变整数指针 (), LPBITMAPINFOHEADER.取数据尺寸 ())
  116.         新位图信息.biWidth = 图片宽度
  117.         新位图信息.biHeight = 图片高度
  118.         如果 (新位图信息.biBitCount == 8)
  119.         {
  120.             内存复制 (新位图.取字节集指针 () + 54, 颜色表.取字节集指针 (), 颜色表.取字节集长度 ())
  121.         }
  122.         变量 总数据偏移 <类型 = 整数>
  123.         总数据偏移 = 原行宽 * (位图信息.biHeight - 图片高度 - 图片顶边) + 图片左边 * 点的大小
  124.         计次循环 (图片高度)
  125.         {
  126.             内存复制 (新位图.取字节集指针 () + 取循环索引 () * 新行宽 + 颜色点阵偏移量, 原位图.取字节集指针 () + 颜色点阵偏移量 + 总数据偏移 + 取循环索引 () * 原行宽, 新行宽)
  127.         }
  128.         返回 (新位图)
  129.     }
  130. }
复制代码

评分

参与人数 2金钱 +3 收起 理由
明靓 + 1 牛逼PLUS!
a649871230 + 2 很给力!

查看全部评分

回复

使用道具 举报

2

主题

7

帖子

34

积分

新手上路

Rank: 1

积分
34
板凳
 楼主| 发表于 13 小时前 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-3-23 15:50 , Processed in 0.080552 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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