将RGB颜色转换成16bit颜色
[适合与游戏编程初学者]
我在做16bit alpha blending的时候需要判断颜色键(ColorKey),而在我的游戏引擎中,ColorKey是用Windows RGB颜色表示的,这就需要将RGB颜色转换成16bit颜色,下面是我的做法。
RGB颜色是一个DWORD值,32bit,格式为0x00rrggbb,通过三个宏:GetRValue、GetGValue和GetBValue可以得到三个颜色分量,用8bitBYTE表示。16bit颜色有555和565两种,以565为例,565模式的16bit颜色格式为:rrrrrggggggbbbbb。我们的任务就是将0x00rrggbb转成rrrrrggggggbbbbb。
首先将RGB的三个分量分离出来,将它们分别转成用5bit,6bit,5bit表示的颜色(前3bit,2bit,3bit为0)。因为8bit是256级色度,转成5bit是32级色度,所以每8级色度一组转成1级色度,除以8(右移3位)就行;同样转成6bit只要除以4,因为6bit能表达64级色度。然后再将得到的5bit与上0x1f,6bit与上0x3f,将8bit前面的3bit或2bit清0。这时得到的三个分量为:R=000rrrrr , G=00gggggg , B=000bbbbb 。最后将它们移位相或就可得到一个16bit565模式的颜色了。运算式如下:
Color16bit =( ( GetRValue(ColorRGB)>>3 ) & 0x1f)<<11 |
( ( GetGValue(ColorRGB)>>2) & 0x3f)<<5 |
( GetBValue(ColorRGB)>>3 ) & 0x1f;
其实并没有必要与上0x1f和0x3f,因为转化后的色度范围是0~31或0~63,前3bit或2bit必为0(从位运算角度看右移后前面空出来的位自动填0);所以去掉上面的与操作,就是(注意移位操作不能合并,否则不能使前3bit,2bit清0):
Color16bit = GetRValue(ColorRGB)>>3<<11 | GetGValue(ColorRGB)>>2<<5 | GetBValue(m_ColorRGB)>>3 ;
挺简单吧,只不过是一堆位运算。只要多动动脑筋,我们可以很容易的写出各种格式之间的转换式。
分享到:
相关推荐
总结来说,"RGB24位颜色代码转换位16位软件"是一个实用的工具,主要用于将24位RGB颜色代码快速转换为16位565格式的颜色代码,以适应资源受限的环境,如TFT液晶显示和单片机应用。它的实现基于C++编程语言,可能利用...
(RGB颜色转化为16位颜色小工具),同事在作TFT屏等单片机开发屏幕程序时,经常问我上位机的红色GRB(255,0,0)转化为下位机红色时,值是多少呢?索性自已开发了一个小工具,供有同样遭遇的朋友直接使用。
这个名为"颜色格式转换(24bit-16bit).zip"的压缩包包含了一个由C#语言编写的程序,用于实现24位RGB(888)到16位RGB(565)的颜色格式转换,并能反向进行。下面我们将详细讨论这两种颜色格式以及它们之间的转换...
本篇文章将深入探讨如何将YUV422格式的图像转换为8位RGB灰度图像,这是一个在视频处理、图像编码与解码等场景中常见的需求。 ### YUV422格式简介 YUV422是一种常见的彩色图像格式,其中“Y”代表亮度信号,“U”和...
网上找不到16位的颜色表,自己用24位颜色表转了16位RGB 5-6-5格式,从表格里拷贝出来放到C代码里用 很方便,用Excel自动生成大量宏定义很好用
该“bmp轻松转为rgb565工具”正是为此目的而设计,它能够快速高效地将这些常见图像格式转换成适合Android开机log使用的rgb565格式。 对于png和jpg格式,它们各有特点。PNG(Portable Network Graphics)是一种无损...
3. **色彩优化**:在转换为8位图像时,程序可能会进行色彩量化,即将大量的颜色合并成更少的、更接近的颜色,以适应8位的限制。这个过程可能会影响图像的视觉质量,但通过智能选择和优化调色板,可以尽可能减少损失...
基于FFmpeg,实现 8k 16bit 立体声 转码 16k 16bit 单声道。
标题提到的"24位颜色值转换16位工具"就是这样一个实用程序,它旨在帮助开发者或设计师将高精度的24位颜色值简化为16位,以适应不同的显示设备或性能需求。 24位颜色系统,也称为True Color,提供了8位(256级)红色...
RGB2 16bit I_F of CPT 2.4LCD with ST7787_20070110.pdf
用于推导ColorChecker色块16位RGB值的方法和方程涉及将CIE xyY值转换至XYZ色度坐标,随后通过特定RGB空间的矩阵转换至该空间的R'G'B'坐标。这一过程考虑了不同RGB空间的基色、照度和伽玛响应特性。为了确保转换的...
3. **16bit到8bit转换的逻辑设计**: - **并行-串行转换**:16位数据可以通过并行-串行转换器转化为8位数据,这通常涉及移位寄存器和多路选择器。16位数据被分组为两个8位部分,然后逐位传输。 - **分组与裁剪**:...
本话题将深入探讨热力图、真彩色以及与之相关的rgba颜色码和16进制颜色码。 首先,让我们了解一下热力图的基本概念。热力图通常由矩阵或格子组成,每个单元格代表一个数据点,并用不同的颜色来表示其数值大小。颜色...
在这个特定的案例中,这个软件声称能够将16位的音频转换成所谓的“宇宙音质”。16位是数字音频的一种常见采样精度,它代表每个声音样本有16个二进制位来表示其强度。在标准CD音频中,就使用了16位采样,提供大约96dB...
在转换过程中,库会根据内部算法将CMYK颜色空间的四个分量转换为对应的RGB值。这个过程涉及到色彩管理,可能需要考虑色彩配置文件(ICC Profile)以确保色彩准确无误地呈现。但默认情况下,许多库会使用简单的线性...
这里我们关注的是如何将BMP图片处理成适合16位色深(16bpp)LCD显示的RGB565格式,并进行一些基本的图像操作,如上下反转和缩放。这个过程涉及到多个关键知识点,让我们逐一探讨。 首先,BMP是一种广泛使用的位图...
在IT领域,音频处理是重要的一环,尤其在多媒体、游戏、语音识别和音乐制作等行业。本主题聚焦于“单通道16k-16bit音频”和“双通道8k-16bit音频”,这些都是音频编码的关键参数,对音质和文件大小有直接影响。 ...
STM32单片机+OV2640模块进行色块识别RGB565转换为灰度图,进行判断二值化,对白色坐标取平均 软件源码,可供学习及设计参考。
批量快速将多张bmp图片转换为bin文件,bmp图片位深度为24bit,bin文件可选择8bit(RGB323)、16bit(RGB565)、24bit(RGB888) 输出,用于烧录到 外部flash,单片机去读取数据显示图像。因为输出每张bmp图片所在flash里的...
RGB1 16bit I_F of CPT 2.4LCD with ST7787_20070110.pdf