设为首页收藏本站

 找回密码
 立即注册

只需一步,快速开始

搜索
查看: 183|回复: 21

结构体,你行你上

 火... [复制链接]
累计签到:30 天
连续签到:1 天
灌水成绩
3
178
3885
主题
帖子
积分

等级头衔

ID : 809

助理工程师

积分成就 测量币 : 3885
在线时间 : 0 小时
注册时间 : 2025-10-30
最后登录 : 2026-6-14

勋章
UID勋章测量学徒测量员
发表于 2026-4-16 17:04:12 来自手机 | 显示全部楼层 |阅读模式 IP:北京
我印象中结构体就是一个小透明,除了有些API必须用到,一般情况下很少被使用,它的用处一般理解为将多个关连变量打包到一起,提升代码的可读性,仅此而已,对我只写少量代码的人来说,基本不用。

    最近,我发现它在某些地方还是有些潜力的,比如,有一个一维数组,里面的数据间隔有规律,每小段数据为一组,这时可以用结构体来简化一些位置计算。
    举个容易理解的例子,比如我喜欢弄一些图片,但不喜欢WIA的低效,所以一般都是通过API,用IPictureDisp来获取像素颜色的数组,因为获取到的数组是一维byte数组,所以如果想要处理某一个或者某个范围的像素数据,必须先要根据像素行列坐标来换算出该像素的颜色值存在于一维数组的哪个位置,虽然只需要一个算式就能得到,但还是挺麻烦的,不直观。
    今天我尝试用结构体来代替一维数组来获取IPictureDisp的像素RGB数据,比较顺利,发现不再需要位置换算了,可以直接用行列值来锁定像素位置。附件是我用结构体Colour改写的截图程序,也保留了我原来方式的代码,用做对比。

注:我一直对API比较敬畏,基本就是照抄或仿照前人的实际案例改写来实现自己的目的,别人写的用字节数组获取API返回的数据,我就不会考虑其他可能性,实际测试后发现有些API返回或者要求的数据,并不一定是固定结构的,也许底层实现就是用的CopyMemory,只要不溢出就行。顺便说下,用CopyMemory改变数组维度也能实现类似功能。

结构体改写截图示例.zip
累计签到:30 天
连续签到:1 天
灌水成绩
1
203
14308
主题
帖子
积分

等级头衔

ID : 592

中级工程师

积分成就 测量币 : 14308
在线时间 : 0 小时
注册时间 : 2026-4-8
最后登录 : 2026-6-29

勋章
UID勋章测量学徒测量员
发表于 2026-4-30 09:33:29 | 显示全部楼层 IP:美国
终于找到一篇讲明白的了,谢谢博主。
回复

使用道具 举报

累计签到:63 天
连续签到:48 天
灌水成绩
2
271
18741
主题
帖子
积分

等级头衔

ID : 525

中级工程师

积分成就 测量币 : 18741
在线时间 : 551 小时
注册时间 : 2025-10-10
最后登录 : 2026-7-7

勋章
发表于 2026-5-1 01:10:33 | 显示全部楼层 IP:广东东莞
博主态度认真,文章质量很高。
回复

使用道具 举报

累计签到:65 天
连续签到:48 天
灌水成绩
2
226
14750
主题
帖子
积分

等级头衔

ID : 561

中级工程师

积分成就 测量币 : 14750
在线时间 : 564 小时
注册时间 : 2026-4-10
最后登录 : 2026-7-7

勋章
UID勋章测量学徒测量员
发表于 2026-5-1 01:21:43 | 显示全部楼层 IP:广东东莞
思路很清晰,逻辑很顺。
回复

使用道具 举报

累计签到:62 天
连续签到:43 天
灌水成绩
3
238
15243
主题
帖子
积分

等级头衔

ID : 578

中级工程师

积分成就 测量币 : 15243
在线时间 : 564 小时
注册时间 : 2026-3-12
最后登录 : 2026-7-7

勋章
UID勋章测量学徒测量员
发表于 2026-5-1 01:41:59 | 显示全部楼层 IP:广东东莞
排版舒服,阅读体验很好。
回复

使用道具 举报

累计签到:63 天
连续签到:48 天
灌水成绩
2
271
18741
主题
帖子
积分

等级头衔

ID : 525

中级工程师

积分成就 测量币 : 18741
在线时间 : 551 小时
注册时间 : 2025-10-10
最后登录 : 2026-7-7

勋章
发表于 2026-5-4 17:00:01 | 显示全部楼层 IP:北京
逻辑很清晰,一步步跟着走就行。
回复

使用道具 举报

累计签到:63 天
连续签到:48 天
灌水成绩
2
271
18741
主题
帖子
积分

等级头衔

ID : 525

中级工程师

积分成就 测量币 : 18741
在线时间 : 551 小时
注册时间 : 2025-10-10
最后登录 : 2026-7-7

勋章
发表于 2026-5-9 02:18:35 | 显示全部楼层 IP:广东东莞
知识点梳理得很清楚。
回复

使用道具 举报

累计签到:35 天
连续签到:3 天
灌水成绩
1
63
3798
主题
帖子
积分

等级头衔

ID : 1067

助理工程师

积分成就 测量币 : 3798
在线时间 : 0 小时
注册时间 : 2026-4-13
最后登录 : 2026-6-30

勋章
UID勋章测量员
发表于 2026-5-11 19:23:20 | 显示全部楼层 IP:欧洲和中东地区
适合快速入门和查漏补缺。
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
灌水成绩
3
32
1632
主题
帖子
积分

等级头衔

ID : 1269

高级技术员

积分成就 测量币 : 1632
在线时间 : 0 小时
注册时间 : 2025-12-18
最后登录 : 2026-6-22

勋章
测量员UID勋章测量学徒
发表于 2026-5-16 01:33:39 | 显示全部楼层 IP:美国
沙发!沙发!
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
灌水成绩
1
18
1528
主题
帖子
积分

等级头衔

ID : 1378

高级技术员

积分成就 测量币 : 1528
在线时间 : 1 小时
注册时间 : 2025-12-4
最后登录 : 2026-7-5

勋章
测量员UID勋章测量学徒
发表于 2026-5-16 09:55:59 | 显示全部楼层 IP:美国
知识点梳理得很清楚。
回复

使用道具 举报

快速回复换一批
感谢楼主,好人一生平安
顶顶顶
马克一下
2333333333
学到了! 请问楼主,这个方法在实际操作中有什么需要特别注意的坑吗? 🧐❓
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|精密测量技术论坛 ( 桂ICP备2026007449号-1 )

GMT+8, 2026-7-7 19:45 , Processed in 0.152139 second(s), 54 queries .

Powered by 精密测量技术论坛

© 2025-2026 联系站长

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