野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8960|回复: 5

请教大神,LCD截屏程序里面的这个地方代码有点小问题!

[复制链接]
发表于 2016-1-5 15:22:02 | 显示全部楼层 |阅读模式
这个截屏函数里面的下面这个语句,是计算生成的位图文件的SIZE的。计算公式里面,补充的像素数也应该乘以3才对啊。请问是不是这么回事呢?源程序里面没有乘3.

file_size = (long)Width * (long)Height * 3 + 3*Height*(Width%4) + 54;               

LCD截屏.jpg
回复

使用道具 举报

发表于 2016-1-5 15:54:38 | 显示全部楼层
只要补齐到4字节对齐就可以了,不需要*3
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-5 16:15:10 | 显示全部楼层
flyleaf 发表于 2016-1-5 15:54
只要补齐到4字节对齐就可以了,不需要*3

明明是一个像素对应3个字节的呢。比如15*8的图片,宽是15,那么需要凑齐到16个像素才是。所以多出的字节应该是3*(15%4)=3个,原来是15*3=45个,现在是16*3=48个字节啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-5 16:34:32 | 显示全部楼层
我明白了,不是以像素数是否被4整除为准,而是以最后的颜色字节数是否被4整除为准的。要把颜色字节数搞成被4整除方可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-5 16:45:46 | 显示全部楼层
flyleaf 发表于 2016-1-5 15:54
只要补齐到4字节对齐就可以了,不需要*3

怎么知道这个式子的结果刚好是4的倍数呢?怎么想到的?(long)Width * (long)Height * 3 + Height*(Width%4) 。难道是数论理论出来的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-5 16:52:03 | 显示全部楼层
终于搞明白了道理,w*h*3+h*(w%4)的结果分为如下几种:  w%4=1,w%4=2,w%4=3,那么w可以分别写为w=4n+1,w=4n+2,w=4n+3,

代入原式内即得:(4n+1)*h*3+h,   (4n+2)*h*3+2h,   (4n+3)*h*3+3h,   分别合并后,发现都是4的倍数哦。哈哈。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-13 15:13 , Processed in 0.030680 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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