开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 323|回复: 11
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 关于 类_位图操作 取出位图数据 取指定位深度

[复制链接]
跳转到指定楼层
楼主
发表于 昨天 13:11 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   湖北省黄石市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 斗战胜猴 于 2025-5-23 23:47 编辑

关于 类_位图操作  取出位图数据 取指定位深度
标准的位图文件头
无需多次转换  位深度:  1, 4, 8, 16, 24, 32
调色板和 api调用请自行更改 还有取指针

  
子程序名返回值类型公开备 注
取出位图数据字节集 BMP位图 文件头+信息头+调色板+颜色数据
参数名类 型参考可空数组备 注
新的位图深度整数型位深度:  1, 4, 8, 16, 24, 32
变量名类 型静态数组备 注
BITMAPINFOBITMAPINFO 
位图像素点阵字节集 
位图信息字节集字节集 
位图文件头BITMAPFILEHEADER 
位图文件头字节集字节集 
位图调色板字节集 
场景句柄1整数型 
位图句柄1整数型 
旧位图句柄1整数型 
位图数据1字节集 
位图指针1整数型 
BITMAPINFO.biSize = 40
GetDIBits_BITMAPINFO (场景句柄, 位图句柄, 0, 0, {  }, BITMAPINFO, 0)
新的位图深度 = 选择 (新的位图深度 ≠ 1 新的位图深度 ≠ 4 新的位图深度 ≠ 8 新的位图深度 ≠ 16 新的位图深度 ≠ 24 新的位图深度 ≠ 32, 0, 新的位图深度)
如果 (新的位图深度 > 0 BITMAPINFO.biBitCount ≠ 新的位图深度)
BITMAPINFO.biBitCount = 新的位图深度
BITMAPINFO.biSizeImage = 左移 (右移 (BITMAPINFO.biWidth × BITMAPINFO.biBitCount + 31, 5), 2) × BITMAPINFO.biHeight
判断 (BITMAPINFO.biBitCount = 1)
位图调色板 = 生成调色板1位图 ()
BITMAPINFO.biClrUsed = 2
BITMAPINFO.biClrImportant = 2
判断 (BITMAPINFO.biBitCount = 4)
位图调色板 = 生成调色板4位图 ()
BITMAPINFO.biClrUsed = 16
BITMAPINFO.biClrImportant = 16
判断 (BITMAPINFO.biBitCount = 8)
位图调色板 = 生成调色板8位图 ()
BITMAPINFO.biClrUsed = 256
BITMAPINFO.biClrImportant = 256
判断 (BITMAPINFO.biBitCount = 16)
BITMAPINFO.biClrUsed = 0
BITMAPINFO.biClrImportant = 0
判断 (BITMAPINFO.biBitCount = 24)
BITMAPINFO.biClrUsed = 0
BITMAPINFO.biClrImportant = 0
判断 (BITMAPINFO.biBitCount = 32)
BITMAPINFO.biClrUsed = 0
BITMAPINFO.biClrImportant = 0



判断 (BITMAPINFO.biBitCount = 1)
位图调色板 = 生成调色板1位图 ()
判断 (BITMAPINFO.biBitCount = 4)
位图调色板 = 生成调色板4位图 ()
判断 (BITMAPINFO.biBitCount = 8)
位图调色板 = 生成调色板8位图 ()



BITMAPINFO.biCompression = 0
BITMAPINFO.biXPelsPerMeter = 3780
BITMAPINFO.biYPelsPerMeter = 3780
BITMAPINFO.biPlanes = 1
位图信息字节集 = 取空白字节集 (BITMAPINFO.biSize)
RtlMoveMemory_BITMAPINFO (位图信息字节集, BITMAPINFO, BITMAPINFO.biSize)
位图文件头.bfType = 19778
位图文件头.bfOffBits = 14 + BITMAPINFO.biSize + BITMAPINFO.biClrUsed × 4
位图文件头.bfSize = 位图文件头.bfOffBits + BITMAPINFO.biSizeImage
位图文件头.bfReserved1 = 0
位图文件头.bfReserved2 = 0
位图文件头字节集 = 取空白字节集 (14)
RtlMoveMemory_BITMAPFILEHEADER (位图文件头字节集, 位图文件头, 14)
如果 (新的位图深度 > 0)
位图像素点阵 = 取空白字节集 (BITMAPINFO.biSizeImage)
位图数据1 = 位图信息字节集 + 位图调色板 + 位图像素点阵
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “CreateCompatibleDC”), , 场景句柄1, 0)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “CreateDIBSection”), , 位图句柄1, 0, PtrBin (位图数据1), 0, PtrInt (位图指针1), 0, 0)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “SelectObject”), , 旧位图句柄1, 场景句柄1, 位图句柄1)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “BitBlt”), , , 场景句柄1, 0, 0, BITMAPINFO.biWidth, BITMAPINFO.biHeight, 场景句柄, 0, 0, 13369376)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “GdiFlush”), , )
位图像素点阵 = 指针到字节集 (位图指针1, BITMAPINFO.biSizeImage)
' GetDIBits_BITMAPINFO (场景句柄1, 位图句柄1, 0, BITMAPINFO.biHeight, 位图像素点阵, BITMAPINFO, BITMAPINFO.biClrUsed)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “SelectObject”), , , 场景句柄1, 旧位图句柄1)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “DeleteObject”), , , 位图句柄1)
调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “DeleteDC”), , , 场景句柄1)
位图像素点阵 = 指针到字节集 (位图指针, BITMAPINFO.biSizeImage)
' GetDIBits_BITMAPINFO (场景句柄, 位图句柄, 0, BITMAPINFO.biHeight, 位图像素点阵, BITMAPINFO, BITMAPINFO.biClrUsed)
返回 (位图文件头字节集 + 位图信息字节集 + 位图调色板 + 位图像素点阵)
数据类型名公开备 注
BITMAPINFO 位图结构信息头 BITMAPINFO
成员名类 型传址数组备 注
biSize整数型 biSize 结构大小 40
biWidth整数型 biWidth 位图宽度
biHeight整数型 biHeight 位图高度
biPlanes短整数型 biPlanes 位图标志
biBitCount短整数型 biBitCount 位深度
biCompression整数型 biCompression 压缩率
biSizeImage整数型 biSizeImage 位图字节数
biXPelsPerMeter整数型 biXPelsPerMeter 水平折像度
biYPelsPerMeter整数型 biYPelsPerMeter 垂直折像度
biClrUsed整数型 biClrUsed 位图颜色表索引
biClrImportant整数型 biClrImportant 位图显示索引
数据类型名公开备 注
BITMAPFILEHEADER 位图文件头
成员名类 型传址数组备 注
bfType短整数型  
bfSize整数型  
bfReserved1短整数型  
bfReserved2短整数型  
bfOffBits整数型  

DLL命令名返回值类型公开备 注
RtlMoveMemory_BITMAPINFO整数型 位图信息字节集
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
RtlMoveMemory
参数名类 型传址数组备 注
Destination字节集
SourceBITMAPINFO
Length整数型
DLL命令名返回值类型公开备 注
RtlMoveMemory_BITMAPFILEHEADER整数型 位图文件头字节集
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
RtlMoveMemory
参数名类 型传址数组备 注
Destination字节集
SourceBITMAPFILEHEADER
Length整数型
DLL命令名返回值类型公开备 注
GetDIBits_BITMAPINFO整数型 gdi32.dll将来自一幅位图的二进制位复制到一幅与设备无关的位图里  非零表示成功,零表示失败。在Windows 95中,返回值是返回的扫描线数量
DLL库文件名:
gdi32.dll
在DLL库中对应命令名:
GetDIBits
参数名类 型传址数组备 注
设备场景句柄整数型aHDC,定义了与设备有关位图hBitmap的配置信息的一个设备场景的句柄
源位图句柄整数型hBitmap,源位图的句柄。绝对不能将这幅位图选入设备场景
扫描线初始编号整数型nStartScan,欲复制到DIB中的第一条扫描线的编号
扫描线数量整数型nNumScans,欲复制的扫描线数量
缓冲区指针字节集lpBits,指向一个缓冲区的指针。这个缓冲区将用于装载采用DIB格式的信息,但不取回数据(用ByVal传递零值)
位图结构BITMAPINFOlpBI,BITMAPINFO,对lpBits DIB的格式及颜色进行说明的一个结构。在BITMAPINFOHEADER结构中,从biSize到biCompression之间的所有字段都必须初始化
常量标志整数型wUsage,下述常数之一:;DIB_PAL_COLORS:在颜色表中装载一个16位所以数组,它们与当前选定的调色板有关;DIB_RGB_COLORS:在颜色表中装载RGB颜色;



截图32位20250523011105.png (15.25 KB, 下载次数: 0)

截图32位20250523011105.png

截图32位20250523011122.png (52.27 KB, 下载次数: 0)

截图32位20250523011122.png

评分

参与人数 1精币 +1 收起 理由
kyo9766 + 1 感谢分享,很给力!~

查看全部评分


结帖率:100% (4/4)

签到天数: 6 天

12
发表于 4 小时前 | 只看该作者   江西省南昌市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 21 天

11
发表于 9 小时前 | 只看该作者   广西壮族自治区玉林市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:82% (9/11)

签到天数: 1 天

10
发表于 13 小时前 | 只看该作者   江苏省苏州市
        给人援助,手有余香。
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 16 天

9
发表于 13 小时前 | 只看该作者   江西省上饶市
功能好强大,支持一下
回复 支持 反对

使用道具 举报

结帖率:98% (111/113)

签到天数: 24 天

8
发表于 13 小时前 | 只看该作者   山东省青岛市
感谢楼主分享!
回复 支持 反对

使用道具 举报

结帖率:96% (53/55)

签到天数: 21 天

7
发表于 13 小时前 | 只看该作者   山东省青岛市
感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

签到天数: 16 天

6
发表于 昨天 20:43 | 只看该作者   河北省石家庄市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 23 天

地下
发表于 昨天 20:09 | 只看该作者   广东省深圳市
学习一下
回复 支持 反对

使用道具 举报

签到天数: 8 天

地板
发表于 昨天 17:26 | 只看该作者   山西省大同市
感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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