16位增强色RGB转换为24/32位真色彩

HUB75E点阵屏色彩从8色到4096色:PWM调光与色彩深度提升实战 本文详细介绍了如何通过PWM调光、时间分帧和色彩抖动技术,将HUB75E点阵屏的色彩显示从8色提升至4096色。文章涵盖了硬件限制分析、软件突破原理、四维色彩增强方案及嵌入式实现优化,为数字艺术和创客项目提供了专业级的色彩表现力解决方案。 阅读详情
biBitCount=16 表示位图最多有65536种颜色。每个色素用16位(2个字节)表示。这种格式叫作高彩色,或叫增强型16位色,或64K色。它的情况比较复杂,当biCompression成员的值是BI_RGB时,它没有调色板。16位中,最低的5位表示蓝色分量,中间的5位表示绿色分量,高的5位表示红色分量,一共占用了15位,最高的一位保留,设为0。这种格式也被称作555 16位位图。如果biCompression成员的值是BI_BITFIELDS,那么情况就复杂了,首先是原来调色板的位置被三个DWORD变量占据,称为红、绿、蓝掩码。分别用于描述红、绿、蓝分量在16位中所占的位置。在Windows 95(或98)中,系统可接受两种格式的位域:555和565,在555格式下,红、绿、蓝的掩码分别是:0x7C00、0x03E0、0x001F,而在565格式下,它们则分别为:0xF800、0x07E0、0x001F。你在读取一个像素之后,可以分别用掩码“与”上像素值,从而提取出想要的颜色分量(当然还要再经过适当的左右移操作)。在NT系统中,则没有格式限制,只不过要求掩码之间不能有重叠。(注:这种格式的图像使用起来是比较麻烦的,不过因为它的显示效果接近于真彩,而图像数据又比真彩图像小的多,所以,它更多的被用于游戏软件)。
       RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。以RGB1(2色位图)为例,比如它的调色板中定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色),那么图像数据001101010111…(每个像素用1位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白…。 
    RGB565使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。程序中通常使用一个字(WORD,一个字等于两个字节)来操作一个像素。当读出一个像素后,这个字的各个位意义如下: 
          高字节                             低字节 
R   R   R   R   R   G   G   G           G   G   G   B   B   B   B   B 
可以组合使用屏蔽字和移位操作来得到RGB各分量的值: 

#define   RGB565_MASK_RED         0xF800 
#define   RGB565_MASK_GREEN     0x07E0 
#define   RGB565_MASK_BLUE       0x001F 
R   =   (wPixel   &   RGB565_MASK_RED)   > >   11;       //   取值范围0-31 
G   =   (wPixel   &   RGB565_MASK_GREEN)   > >   5;     //   取值范围0-63 
B   =     wPixel   &   RGB565_MASK_BLUE;                   //   取值范围0-31 

¨   RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一个字读出一个像素后,这个字的各个位意义如下: 
          高字节                           低字节 
X   R   R   R   R   G   G               G   G   G   B   B   B   B   B               (X表示不用,可以忽略) 
可以组合使用屏蔽字和移位操作来得到RGB各分量的值: 

#define   RGB555_MASK_RED         0x7C00 
#define   RGB555_MASK_GREEN     0x03E0 
#define   RGB555_MASK_BLUE       0x001F 
R   =   (wPixel   &   RGB555_MASK_RED)   > >   10;       //   取值范围0-31 
G   =   (wPixel   &   RGB555_MASK_GREEN)   > >   5;     //   取值范围0-31 
B   =     wPixel   &   RGB555_MASK_BLUE;                   //   取值范围0-31 

¨   RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR   BGR   BGR…。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为: 

typedef   struct   tagRGBTRIPLE   {   
    BYTE   rgbtBlue;         //   蓝色分量 
    BYTE   rgbtGreen;       //   绿色分量 
    BYTE   rgbtRed;           //   红色分量 
}   RGBTRIPLE; 

¨   RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB32。)注意在内存中RGB各分量的排列顺序为:BGRA   BGRA   BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为: 

typedef   struct   tagRGBQUAD   { 
    BYTE         rgbBlue;             //   蓝色分量 
    BYTE         rgbGreen;           //   绿色分量 
    BYTE         rgbRed;               //   红色分量 
    BYTE         rgbReserved;     //   保留字节(用作Alpha通道或忽略) 
}   RGBQUAD; 


处理16bit的RGB图像并保存为24bit的像素格式时,可参照如下处理方式
/// @brief 多字节位移要注意大端小端问题,x86默认小端
switch(d3dFormat)
{
case D3DFMT_R5G6B5:
#define   RGB565_MASK_RED 0xF800 
#define   RGB565_MASK_GREEN 0x07E0 
#define   RGB565_MASK_BLUE 0x001F 
r = ((wPix16 & RGB565_MASK_RED) >> 11) * (256 / 32);  ///< 取值范围0-31,线性放大
g = ((wPix16 & RGB565_MASK_GREEN) >> 5) * (256 / 64);  ///< 取值范围0-63,线性放大
b = (wPix16 & RGB565_MASK_BLUE) * (256 / 32);            ///< 取值范围0-31,线性放大
memcpy(lpDst, &b, 1);
memcpy(lpDst + 1, &g, 1);
memcpy(lpDst + 2, &r, 1);
uiOffset = 2;
break;

case D3DFMT_X1R5G5B5:
case D3DFMT_A1R5G5B5:
#define   RGB555_MASK_RED 0x7C00
#define   RGB555_MASK_GREEN 0x03E0
#define   RGB555_MASK_BLUE 0x001F
r = ((wPix16 & RGB555_MASK_RED) >> 10) * (256 / 32);  ///< 取值范围0-31,线性放大
g = ((wPix16 & RGB555_MASK_GREEN) >> 5) * (256 / 32);  ///< 取值范围0-31,线性放大
b = (wPix16 & RGB555_MASK_BLUE) * (256 / 32);            ///< 取值范围0-31,线性放大
memcpy(lpDst, &b, 1);
memcpy(lpDst + 1, &g, 1);
memcpy(lpDst + 2, &r, 1);
uiOffset = 2;
break;

case D3DFMT_A4R4G4B4:
case D3DFMT_A8R3G3B2:
case D3DFMT_X4R4G4B4:
case D3DFMT_L16:
case D3DFMT_A8L8:
// 参照上面同理处理
uiOffset = 2;
break;
}
FPGA驱动RGB屏幕:从时序解析到双模式(RGB888/RGB565)兼容设计 本文详细介绍了FPGA驱动RGB屏幕的技术实现,从时序解析到双模式(RGB888/RGB565)兼容设计。通过FPGA的并行处理优势,解决了传统单片机驱动RGB屏幕的瓶颈问题,并提供了Verilog代码示例和优化方案,帮助开发者高效实现屏幕驱动设计。 阅读详情

相关推荐

OpenCV-Python实战(6)——OpenCV中的色彩空间和色彩映射

为了更好的表示色彩,人们建立了多种色彩模型以一维、二维、三维等坐标系来描述不同色彩,这种坐标系所能定义的色彩范围即色彩空间;而色彩映射是将图像在一个色彩空间映射至另一色彩空间的操作,通常可以将灰度图像着色为等效的伪色彩图像。本文将介绍OpenCV中的色彩空间和色彩映射,并进行实战以应用。

盼小辉丶的博客 3万+

24位RGB颜色转换为16位RGB

找了很久终于找到这个转换方法,笔记整理如下: 24位RGB是分别由8位红色,8位绿色以及8位蓝色组成: RRRRRRRRGGGGGGGGBBBBBBBB 例如:24位RGB红色表示方法为 111111110000000000000000(十六进制表示为:0xFF0000) 而对应的16位RGB颜色则是由5位红色,6位绿色以及5位红色...

evlpr8的博客 6960

基于VC6.0的24位BMP图像显示实现

BMP(Bitmap)是一种广泛使用的位图图像格式,因其结构简单、易于解析而在图像处理领域占据重要地位。BMP文件通常由三个主要部分组成:文件头(BITMAPFILEHEADER)信息头(DIB头,BITMAPINFOHEADER)以及像素数据(Pixel Data)。文件头(BITMAPFILEHEADER):包含文件的基本信息,如文件类型、文件大小、数据偏移量等。DIB头(BITMAPINFOHEADER):详细描述图像的尺寸、颜色格式、压缩方式等。

weixin_42610010的博客 754

RGB16转换RGB24

原文地址:http://blog.youkuaiyun.com/juyingmin/article/details/5733761  在视频采集和视频的编解码中,常出现RGB16的数据格式,而我们最常用是图像处理数据格式为RGB24。他们之间需要转换,整理如下: RGB16数据像数数据格式有二种:     (1)RGB565 每个像素用16位表示,RGB分量分别使用5位、

nkliming的专栏 3844

1014. 福尔摩斯的约会 (20)-PAT乙级真题

1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’

柳婼 の blog 2646

Qt5.12.12安卓开发环境搭建:Windows下避开SDK版本坑的保姆级教程

本文提供Qt5.12.12在Windows下搭建Android开发环境的详细教程,重点解决SDK版本兼容性问题,特别是cmdline-tools与JDK8的匹配陷阱。通过精准选择组件版本、手动配置路径和修复常见错误,帮助开发者高效完成环境配置,适用于Qt跨平台移动开发。

weixin_33737774的博客 542

将RGB颜色转换成16bit颜色[适合游戏编程初学者]

将RGB颜色转换成16bit颜色[适合与游戏编程初学者]   我在做16bit alpha blending的时候需要判断颜色键(ColorKey),而在我的游戏引擎中,ColorKey是用Windows RGB颜色表示的,这就需要将RGB颜色转换成16bit颜色,下面是我的做法。   RGB颜色是一个DWORD值,32bit,格式为0x00rrggbb,通过三个宏:GetRValue、G

聚焦游戏和图形引擎开发技术 7033

求无向图中所有的环 C++ python

求无向图中所有的环

random_repick的专栏 1151

c语言读取24位颜色信息,位操作存取RGB颜色值的方法

分享一个位操作存取RGB颜色值的方法。缘由我需要在数据库里面存储rgb颜色,但是直接存字符串这样太low了,于是想办法 将rgb颜色经过位运算得到24位的int值,储存在mysql里面可以直接用medium int类型,很节省空间。(当然,c语言并没有24位类型,只有32位的无符号整数,在前面补8位0就ok啦,在我php中就不存在这个现象啦,哈哈)RGB三种颜色混合成一个整型操作R:255 24位...

weixin_32199821的博客 1572

PostGIS 小白入门详细指南

PostGIS 是 PostgreSQL 的一个扩展,它将 PostgreSQL 转变为一个功能强大的空间数据库,使其能够存储、查询和分析地理空间数据。PostGIS 遵循开放地理空间联盟(OGC)的标准,支持各种空间数据类型和操作,如点、线、多边形、缓冲区、空间连接等。存储各种空间数据类型(如几何类型和地理类型)空间索引,提高查询性能丰富的空间函数和操作支持投影和坐标系统转换城市规划与管理环境监测与分析物流与运输优化地图制作与可视化位置服务与导航。

落魄书生的职业学习生涯 1万+

Innovus ECO修复时序违例:ecoAddRepeater插Buffer原理与实战

芯片物理设计越到后期,时序收敛越依赖局部修正而非全局重跑。ECO(Engineering Change Order)作为数字后端高频操作,能在不破坏既有布局布线结果的前提下,精准修复DRV违例、hold时序问题或实现功能补丁。其中,插入Buffer或Inverter是拆解长线RC负载、改善max_transition/max_capacitance最直接的手段。Innovus提供的ecoAddRepeater命令封装了单元选择、坐标摆放和网表重连等底层细节,配合ecoRoute可快速完成绕线。合理选型Buf

weixin_31858171的博客 300

像素背后的色彩科学:从LCD色深到人眼感知的视觉工程

本文深入探讨LCD显示器的色彩科学,解析32位色深与人眼感知的匹配机制,涵盖色彩空间转换、伽马校正和色域映射等核心技术。通过算法优化和硬件校准,提升色彩还原度,实现跨设备色彩一致性,为图形工程师和设计师提供实用的视觉工程解决方案。

mm9012的博客 1069

vuecli3 实现 移动端和pc端 界面切换(两套代码)

适合场景 多页面多系统应用 所有系统都在同一目录下。配置多入口多出口。每个系统之间可以链接。每个系统内依然采用Vue单页应用开发。 产品需求:一套代码 兼容pc端和移动端 , 移动端和pc端的样式布局差别很大,需要使用多界面,并判断使用手机的时候跳转移动端代码,使用pc端跳转pc端代码。 项目目录 分为两部分代码,pc 和mobile 第一步:创建一个登陆页面的文件 在项目public文件夹下创建一个login.html,其实就是将index.html复制一份,将title改一下: <!DOCTYP

你怎么也喜欢嘴巴嘟嘟 5920

将真彩色转换成增强色的方法(即RGB32位或RGB24位颜色转换成RGB16位颜色的函数)...

今天由于程序需要,需要将真彩色转换成增强色进行颜色匹配,上网搜了一下没搜到相应函数,于是研究了一下RGB16位的增强色,写了这个函数: public static int RGB16(int argb) { uint t = (uint)argb;//转uint便于移位 //argb共32位,AARRGGBB,RGB24只...

weixin_30651273的博客 732

优化dalsa相机检测界面

上节实现了使用qt结合dalsa相机显示检测到缺陷的画面,由于窗口过于简陋,本节将进行一个界面优化。

A1983Z的博客 989

【毕设实战】基于YOLOv8的HRSC2016船舶智能检测系统开发全指南(含可视化UI界面,打造海事领域高分毕设)

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

know_F0727的博客 130

Android 色深 32位支持

<br />首先介绍有关色彩深度的知识。<br />计算机显示器上同时能显示的颜色数量是由色彩深度(Color Depth )决定的,例如色彩深度若为16 则同时能显示2 的16 次方即65536 种颜色,色彩深度若为24 则同时能显示2 的24 次方即16777216 种颜色。在显卡驱动设置里通常把16 位色模式称为“增强色”,24 位色模式称为“真彩色”。至于显卡支持的 32 位色模式,只是为了更好地处理色彩,实际上液晶面板能支持的色彩深度通常还是24 位,也就是红绿蓝各8

SkyGray的专栏 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android 色深32位支持

首先介绍有关色彩深度的知识。 计算机显示器上同时能显示的颜色数量是由色彩深度(Color Depth )决定的,例如色彩深度若为16 则同时能显示2 的16 次方即65536 种颜色,色彩深度若为24 则同时能显示2 的24 次方即16777216 种颜色。在显卡驱动设置里通常把16 位色模式称为“增强色”,24 位色模式称为“真彩色”。至于显卡支持的32 位色模式,只是为了更好地处理色

hong19860320的专栏 1230

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C/C++实现24位RGB颜色转换库:从HEX到HSV/HSL/CMYK的算法与工程实践

颜色模型是计算机图形学和数字图像处理的基础概念,它定义了如何在数字系统中表示和操作颜色。常见的模型包括用于显示的RGB(红绿蓝)加色模型、更符合人类感知的HSV/HSL(色相、饱和度、明度/亮度)模型,以及用于印刷的CMYK(青、品红、黄、黑)减色模型。理解这些模型之间的转换原理,是进行UI设计、图像处理、游戏开发等技术实践的关键。其技术价值在于,将抽象的数学表示转化为可编程的算法,使开发者能够精确控制色彩,实现调色、滤镜、色彩空间转换等功能。在嵌入式设备UI开发、图形图像处理、游戏引擎等应用场景中,一个高

weixin_34413103的博客 603

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【C#】【WriteableBitmap】8位灰度图转24色位图

本文详细探讨了WPF/UWP中将8位灰度图转换为24位RGB位图的技术方案。文章首先对比了两种格式的本质差异,包括色彩空间、像素位数和内存占用等关键特性。核心实现基于WriteableBitmap类,介绍了像素格式体系、关键操作模式和C#代码示例。针对性能优化提出了内存管理、计算并行化和GPU加速等策略,并分析了特殊场景如DICOM医学影像的处理方法。最后提供了全面的质量验证方案,包括视觉检查、数值验证和性能基准测试,确保转换过程在保持图像质量的同时实现高效处理。

秋天好的博客 532

从色彩科学到硬件实现:STM32H750 LTDC的RGB888色彩深度探索与优化

本文深入探讨STM32H750微控制器的LTDC控制器实现RGB888色彩深度的技术细节与优化策略。通过分析硬件架构、内存带宽管理和色彩校正方法,为医疗影像、工业仪表等高端嵌入式显示应用提供完整的解决方案,确保1677万色的精准再现和流畅性能。

q1w3e5r7t9y的博客 194

一文搞懂 RGB 与 YUV

第一个 4 表示每个像素都有一个亮度分量(Y),第二个 4 表示每个像素都有一个 U 色度分量,第三个 4 表示每个像素都有一个 V 色度分量。4:2:0 表示第一个 4 表示每个像素都有一个亮度分量(Y),第二个 2 表示每两个像素共享一个 U 色度分量,第三个 0 表示每四个像素共享一个 V 色度分量(即每两个像素共享一个色度分量)。4:2:2,第一个 4 表示每个像素都有一个亮度分量(Y),第二个 2 表示每两个像素共享一个 U 色度分量,第三个 2 表示每两个像素共享一个 V 色度分量。

Leon_Chenl的博客 3468

Android的显示色彩位数

首先介绍有关色彩深度的知识。 计算机显示器上同时能显示的颜色数量是由色彩深度(Color Depth)决定的,例如色彩深度若为16则同时能显示2的16次方即65536种颜色,色彩深度若为24则同时能显示2的24次方即16777216种颜色。在显卡驱动设置里通常把16位色模式称为“增强色”,24位色模式称为“真彩色”。至于显卡支持的 32位色模式,只是为了更好地处理色彩,实际上液晶面板能支持的色彩

yuanfen139re的专栏 3200

数字图像处理中的色彩模型:从RGB到HSV的工程实践指南

色彩模型是数字图像处理的基础概念,它定义了计算机如何表示和操作颜色。其核心原理基于人眼视觉特性和光学物理,通过不同的数学坐标系(如RGB、HSV、YUV)对颜色进行量化描述。理解色彩模型的技术价值在于,它能显著提升图像处理算法的效率与准确性,使开发者能够针对特定任务选择最优的色彩空间进行运算。在应用场景上,RGB模型作为硬件原生格式,适用于图像显示与存储;HSV/HSL模型因其符合人类直觉的色调、饱和度、亮度分离特性,广泛应用于颜色识别、滤镜调整和图像分割;而YUV/YCbCr模型则利用人眼对亮度更敏感的特

weixin_33812433的博客 385

图像基础:BMP、RGB、JPG、PNG等格式详解(一)

什么是BMP BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点–占用磁盘空间过大。所以,目前BMP在单机上比较流行。 BMP文件结...

weixin_43455834的博客 2万+
上一篇: 如何制作驱动程序安装包
下一篇: 24位位图,旋转180
Enbiting
博客等级 码龄18年 19粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值