图片8位, 16位,24位,32位原理,以及如何进行补位互转

news2024/12/28 18:11:44

写在前面:之前一直没有这个概念,以为像素就是十六进制如 #FFFFFF,或者rgb(255,255,255) 即可实现颜色定义,理解相当肤浅,接触到一个物联网项目,写底层的童鞋让我把16位如 0*FFFF转为24位去显示在浏览器,同时下发给硬件的时候再转回十六位给他,瞬间干懵逼,特意花了两个小时去查阅相关资料,终于有了一知半解,汇总以备忘。

引用了CSDN与知乎优秀总结:

博主:丁香树下丁香花开:8位, 16位,24位,32位图片显示原理及对比https://blog.csdn.net/csdn66_2016/article/details/82850695文章浏览阅读5.9w次,点赞50次,收藏169次。 我们都知道一张图片可以保存为很多种不同的格式,比如bmp/png/jpeg/gif等等。这个是从文件格式的角度看,我们抛开文件格式,看图片本身,我们可以分为8位, 16位, 24位, 32位等。 单击右键,属性->详细信息即可查看图片位深度:8位: 2^8 = 2^2(B) 2^3(G) 2^3(R) = 256 (256色) 可以总共显示256种颜色16位:..._24位图片https://blog.csdn.net/csdn66_2016/article/details/82850695

博主:wkd_007 :bmp位图格式详细介绍-1/4/8/16/24/32bit、存储格式等bmp位图格式详细介绍-1/4/8/16/24/32bit、存储格式等_bmp文件详解-CSDN博客文章浏览阅读1.5w次,点赞23次,收藏88次。详细介绍bmp位图文件的四个部分:位图文件头、位图信息头、调色板、位图数据,并且结合位图文件数据举例说明了什么是位图文件,bmp位图看这篇文章就差不多了_bmp文件详解https://blog.csdn.net/wkd_007/article/details/128214157

 以及知乎:16位色对24位色的映射? - 知乎

总结一些概念性知识点:希望能从概念,实操,代码说明上对图片位数理解更深入一些

一,位图

位图图像(bitmap),亦称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。

二,位深 

常用的8位图,24位图,其实就是在说这个图像,是用了多少位二进制来表示色值。位深指的就是二进制的位数(bit)。
比如,位深只有1位的话,那就只能用0和1表示颜色,也就是0(黑)和1(白)两种颜色。
通常计算机用一个字节(8位)来控制一种颜色的强度,那要表示R、G、B就需要24位(3*8),这也是最常见的图像位深。 【引自知乎:16位色对24位色的映射? - 知乎】

三,不同位深图片的存储原理

8位:  2^8 = 2^2(B) 2^3(G) 2^3(R) = 256  (256色)    可以总共显示256种颜色

16位:2^16 = 2^5(B) 2^6(G) 2^5(R) =  65536    可以总共显示65536种颜色

24位:2^24 = 2^8(B) 2^8(G) 2^8(R) =  16777216    可以总共显示16777216种颜色

32位:Alpha透明度 + 24位

区别:

当8或16位深度时,单个原始颜色 (R/G/B)最大只能表示为(0~2^3)/(0~2^6), 无法满足(0~0xff)的范围,所以显示的颜色范围有限。

  当24位深度时,使用24bit显示一个像素点, 由8bit Red, 8bit Green, 8bit Blue组合颜色而成,每一个原始颜色(R/G/B)都可以完全显示(0~0xff),所以24位及以上,我们就叫做真彩色

  当32位深度时,与24位相同,可以显示所有的颜色,同时多了一个透明度值。

 【以下位图介绍引自知乎:16位色对24位色的映射? - 知乎】

1、24位图

24位图每个像素占用3个字节,每一个原始颜色(R、G、B)都使用8位表示,因此占用24位(8*3)。每个原始颜色都能完整显示256阶颜色,其表示的色彩有16777216种颜色(256^3)。由于人眼最多可以识别100多万种颜色,因此也将24位叫做真彩色。
图中像素的信息为:1111 0011 1110 1010 0011 0111

2、16位图

16位图每个像素占用2个字节,也是通过RGB数值来表示颜色,与24位图原理类似。根据二进制的特征,低位数值的变化对于整体数值影响不大,因此将8位缩减,而达到减少字节的效果。在实际显示时,通过特定的转换方式将16位再扩展为24位。概括来说,就是移位补0的方式。
常见的16位图有两种格式,分别为RGB565、RGB555

  • RGB565

RGB565的存储信息方式就是R-5位、G-6位、B-5位。565存储方式下,示例的像素点信息为

转换为24位时,R-后3位补0、G-后2位补0、B-后3位补0

实际显示的颜色信息为:1111 0000 1110 1000 0011 0000,换算为RGB(240,232,48)。

  • RGB555

RGB555的存储信息方式是,最高位不用,每个颜色都占5位。555存储方式下,示例的像素点信息为:

转换为24位时,每个颜色后3位补0,换算为RGB还是(240,232,48)。

对比色值可以看到,转换之后与原始颜色的RGB数值差异是较小的。只是在有颜色过渡的情况下,会由于丢失细节数据,而导致过渡相对不平滑。但对于本身像素间差异就比较大的图片不会有太大影响,但每个像素点可以节约1个字节的空间,对于大尺寸图片来说存储优势还是比较明显的。

3、8位图

8位图的像素信息与以上二种是完全不同的,采用的是索引色,单个像素存储的值不是直接的RGB色值,而是一个映射关系。这里插一个概念:如果像素信息就是RGB色值,叫做直接色
8位图的图片信息中先存储了一个256行的色彩数列,单个像素信息存储的值指向对应的行,读取这一行存储的RGB值进行显色,因此称为索引色。假设某一个像素的的值为4,那这个像素就与数列的第4行形成映射,在屏幕显示的实际颜色是就是第4行的RGB值。

四,转换实战:硬件16位颜色转24位给浏览器显示

(因为楼主是PHPer,故从php的角度进行转换,其他语言同理)

转换一:硬件上报16位,程序解析成24位

条件:假使硬件童鞋下发给我们指令颜色为565格式的16位的数据,如:0*FFFF

第一步:0*FFFF 十六进制转二进制:为 1111111111111111

第二步:按照R-后3位补0、G-后2位补0、B-后3位补0,可先切换为 11111 111111 11111,分别补3个0,2个0,3个0,即为 11111000  11111100  11111000,二进制转十进制,即为:rbg(248,252,248)

【理论上硬件下发的是白色,也就是应该转成 rgb(255,255,255),但是因为位移关系,造成的细微误差可以忽略不计,因为本身就是为了减少字节长度】

转换二:程序设置颜色为24位,下发给硬件需转成16位

条件:假使我们设置的颜色为rgb(255,255,255),需要下发给硬件

第一步:255,255,255 转二进制:11111111  11111111  11111111

第二步:按565格式,将每个二进制的数据,8字节按323进行减少,即为:11111  111111  11111,再由二进制转十六进制:即为 0*FFFF

至此,转换流程ok!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1651675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美业SaaS系统多门店收银系统源码-【分润常见问题】讲解(二)

美业管理系统源码 博弈美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 分润常见问题: 4、若产品的服务方分润>0,则销售方分润和服…

考研管理类联考(专业代码199)数学基础【3】函数、方程、不等式

一、函数 1.一次函数 y kx b(k≠0) 的图象及性质 2.二次函数y ax^2 bx c的图象和性质 3.指数函数y a^x ( a>0,且a≠1)的图象和性质 4.对数函数y logₐx ( a>0,且a≠1)的图象与性质 二、方程 1.一元…

大数据和AI在半导体生产系统中的应用

大数据和AI在半导体生产系统中的应用场景非常广泛,涉及从设计、制造到质量控制和市场分析的各个环节。以下是一些具体的半导体大数据应用场景、技术原理、以及实现这些应用的具体做法和方法: 01、半导体大数据应用场景 1. 预测性维护 - **应用场景**:预测设备故障,提前…

android图标底色问题,debug与release不一致

背景 在android 8(sdk 26)之前的版本,直接使用图片文件作为图标,开发时比较容易控制图标,但是不同的安卓定制版本就不容易统一图标风格了。 在android 8及之后的版本,图标对应的是ic_launcher.xml&#x…

充电宝哪个牌子好更耐用?2024年耐用充电宝不能错过

随着科技的进步和智能手机的普及,我们的生活已经与手机紧密相连。然而,手机电量的限制却常常让我们感到焦虑和不安。一旦手机没电,我们就仿佛失去了与外界联系的能力,无法及时接收重要信息、进行导航或支付。为了解决这个问题&…

运放的同相与反相放大

反相放大器 同相端接地,电压为 0,反相端和同相端虚短,因此也是 0 V 的电压,同时由于虚断,几乎没有电流注入,所以R 1 和R 2 相当于串联,电阻上的电流相等 因此可以求出输入输出关系式为 V o u t…

【python数据分析基础】—pandas透视表和交叉表

目录 前言一、pivot_table 透视表二、crosstab 交叉表三、实际应用 前言 透视表是excel和其他数据分析软件中一种常见的数据汇总工具。它是根据一个或多个键对数据进行聚合,并根据行和列上的分组键将数据分配到各个矩形区域中。 一、pivot_table 透视表 pivot_tabl…

gitee 简易使用 上传文件

Wiki - Gitee.com 官方教程 1.gitee 注册帐号 2.下载git 安装 http://git-scm.com/downloads 3. 桌面 鼠标右键 或是开始菜单 open git bash here 输入(复制 ,粘贴) 运行完成后 刷新网页 下方加号即可以添加文件 上传文件 下载 教程…

谷底入场,2024年普通人如何布局大健康赛道?_产业_发展_市场

【181、2077、9182】 坐标:厦门,我是易创客运营肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 今天为大家介绍普通人如何布局大健康赛道。 马云曾经说,未来10年能够超越阿里的…

医院预约挂号|基于Springboot+vue的医院预约挂号系统小程序的设计与实现(源码+数据库+文档)

医院预约挂号系统小程序 目录 基于Springboot+vue的医院预约挂号系统小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1小程序端 后台功能模块 4.2.1管理员功能 4.2.2医生功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

Py脚本_文件分类

最近发现通过Edge和chrome或者其他浏览器下载的文件都存放在一个地方就很繁琐,于是翻找以前的脚本来归纳这些文件,虽然有IDM下载独有会自动分类,但是相信很多同学都在一个文件里找文件,这次就写个Py脚本来实现这个功能。 # -*- c…

git bash退出vim编译模式

解决方法: 1.按esc键(回到命令模式) 此时是没有分号让我们在后面输入命令的 2.按shift键: 3.再输入:wq,并按enter键 此时我们发现又回到git bash窗口 希望对大家有所帮助!

配置好Maven后本地仓库不自动加载以及创建Maven报错的解决方法

先退出到全局模式再点击All Settings 点击maven 修改Maven home path修改了这个local不同步 点击Flie中的Module 然后选择maven 点击next设置需要存放的位置以及组名 然后报错 报错误的原因是因为maven版本太高和与你使用的IDEA版本不兼容 将maven的版本改为3.6并修改环境变量 …

销毁机密文件你还在用删的吗?文件粉碎了解一下哈!(附自制工具下载)

网管小贾 / sysadm.cc 窗外淅淅沥沥,陶克龙回到闷热的办公室,一屁股坐到了椅子上。 一大早他就接到了组织的秘密联络,他的身份已经暴露,需要尽快撤离。 此时的陶克龙大脑飞快地运转着,他需要从纷繁复杂的思绪中抽丝剥…

对于习惯使用ftp传输的企业,如何寻找最佳的替代方案?

FTP协议广泛应用各行业的文件传输场景中,对于很多企业而言,由于FTP应用获取门槛低、使用普遍,因此,有较为稳定的FTP使用习惯,但即便如此,也不得不面对,FTP应用存在着严重缺陷: 传输效…

AnaTraf:一款功能强大的网络流量分析工具,助您实现高效网络管理

在当下迅速发展的网络时代,网络流量分析已经成为网络管理和维护的关键环节。 AnaTraf网络流量分析仪:全面把控网络状况 AnaTraf 是一款高性能的实时网络流量分析工具,能够帮助您全面了解网络状况,提高网络运维效率。其主要功能包括: 全流量回溯分析&am…

node报错——解决Error: error:0308010C:digital envelope routines::unsupported——亲测可用

今天在打包vue2项目时,遇到一个报错: 最关键的代码如下: Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:80:19)百度后发现是node版本的问题。 在昨天我确实操作了一下node&…

终于找到微信聊天记录SQLite数据库文件解密方法了,一起来看看吧!

https://github.com/xuchengsheng/ 获取当前登录微信的微信昵称、账号、手机号、邮箱、秘钥、微信Id、文件夹路径 将微信PC的多个聊天记录数据库合并为单一数据库文件 支持微信聊天对话窗口(文本消息,引用消息,图片消息,表情消息…

亚马逊最新的 Echo Show 5 和 Show 8

爆爆!亚马逊最新智能显示器终于来了!Show 8可是一个功能超强的小工具,既能当数码相框、智能家居控制器和闹钟,还能控制您家中的几乎所有设备!8英寸的显示屏让您流媒体和视频通话体验更加流畅! 如果您不需要…

Java并发编程: Synchronized锁升级

文章目录 一、jdk8 markword实现表二、使用工具来查看锁升级 一、jdk8 markword实现表 new -> 偏向锁 -> 轻量级锁(自旋锁、自适应自旋锁)-> 重量级锁: 偏向锁和轻量级锁都是用户空间完成的。重量级锁是需要向内核申请的。 synchr…