|
.版本 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, 整数型
这个代码用火山怎么写?
|
|