RGB888彩色说明
32位色彩空间
32位色彩空间32位色彩空间(32-bit Color Space)导语:32位色彩空间是一种用于表示颜色的数值系统,它可以同时存储颜色的红、绿、蓝和透明通道信息,使图像更加真实、细腻,并增加了图形处理的灵活性和效果。
本文将介绍32位色彩空间的原理、应用以及优势等相关内容。
一、32位色彩空间的原理在计算机中,图像是由像素组成的,每个像素包含了表示颜色的信息。
在传统的24位色彩空间中,每个像素使用24位(或称为RGB888)来表示颜色,即8位用于表示红、绿、蓝三个通道的亮度,每个通道有256个亮度级别可供选择。
这种表示方式可以表示16,777,216种不同的颜色。
而在32位色彩空间中,每个像素使用32位(或称为ARGB8888)来表示颜色,除了红、绿、蓝三个通道的亮度外,还有一个透明度通道。
这样,每个通道都有256个亮度级别可供选择,包括透明度通道也有256个级别,共同构成了4个8位组成的32位数。
这种表示方式可以表示4,294,967,296种不同的颜色。
透明度通道的作用在于控制像素的不透明度,允许将图像上的某些像素设置为半透明或全透明。
二、32位色彩空间的应用1. 图像渲染和处理32位色彩空间在图像渲染和处理方面有广泛的应用。
例如,在图形处理软件中,通过调整透明度通道可以达到半透明或全透明效果,使图像看起来更加真实。
此外,通过调整红、绿、蓝通道的亮度,可以对图像进行色彩校正和增强,使其更符合设计或需求。
2. 游戏开发在游戏开发中,32位色彩空间可以用来创建更逼真的游戏画面。
透明度通道可以用于实现半透明的物体,例如玻璃、水或烟雾等效果。
同时,通过调整红、绿、蓝通道的亮度,可以使游戏更加生动、丰富多彩。
3. 视频处理在视频处理中,32位色彩空间常用于视频合成和特效制作。
通过调整透明度通道,可以将多个视频图层进行叠加和混合,生成各种炫酷的视觉效果。
此外,通过调整红、绿、蓝通道的亮度,可以对视频进行色彩校正和增强,提高观赏性。
lcd 颜色 编码
LCD( 液晶显示器)颜色编码通常使用RGB编码系统,即红色( R)、绿色( G)和蓝色( B)的组合。
通过调整三种基本颜色的强度和亮度,可以生成不同的颜色。
在LCD颜色编码中,通常使用8位编码,即每种基本颜色可以取0-255的数值,共有约1677万种不同的颜色组合。
这种编码方式又被称为True(Color 真彩色)编码。
具体而言,每种颜色的8位编码范围是:
-(R 红色):0-255
-(G 绿色):0-255
-(B 蓝色):0-255
通过将不同的R、G、B数值组合在一起,就可以得到特定的颜色。
例如,编码为(255,(0,(0)的颜色为纯红色 红色最大,绿色和蓝色为0),编码为(0,(255,(0)的颜色为纯绿色,编码为(0,(0,(255)的颜色为纯蓝色。
还有一种常用的LCD颜色编码方式是16位编码,其中5位用于红色,6位用于绿色,5位用于蓝色。
这种编码方式被称为RGB565编码,它提供了32,768种颜色组合。
需要注意的是,不同的LCD型号和厂商可能有不同的颜色编码方式和范围。
上述介绍的是目前比较常见的编码方式,但请查阅相关型号设备的技术规格手册以获取具体信息。
通过相机获取bayer图像数据转换成RGB888数据并保存
通过相机获取bayer图像数据转换成RGB888数据并保存前⾯的⽂章使⽤opencv 库的⽅法实现了转换bayer的灰度图像转换成彩⾊图像,但是颜⾊跟实际颜⾊差距太⼤。
后来想直接在从相机中获取的bayer图像数据转换成RGB888 的真彩bmp图⽚。
中间遇到过图⽚保存过打开出错的问题并在前⾯的博客中说明了问题与原因并解决。
我使⽤的是映美精扳机相机。
通过usb连接到linux 系统PC机上。
以下是读取bayer图像数据,转换成RGB888数据并保存为图⽚的源程序:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <errno.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/time.h>#include <sys/mman.h>#include <linux/videodev2.h>#include <libv4l2.h>#include <libv4l1.h>/*位图头⽂件数据结构*/typedef struct tagBITMAPFILEHEADER {unsigned char bfType[2]; //位图⽂件类型,必须为'B' 'M'unsigned long bfSize; //位图⽂件⼤⼩(以字节为单位)unsigned short bfReserved1; //位图⽂件保留字,必须为0unsigned short bfReserved2; //位图⽂件保留字,必须为0unsigned long bfOffBits; //位图数据的起始位置,以相对位图⽂件头的偏移量(单位字节)}BITMAPFILEHEADER ; //共14Byte/*位图信息数据结构*/typedef struct tagBITMAPINFOHEADER{unsigned long biSize; //本结构所占⽤字节数long biWidth; //位图宽度,以像素为单位long biHeight; //位图⾼度,以像素为单位unsigned short biPlanes; //⽬标设备级别,必须为1unsigned short biBitCount; //每个像素所需的位数,1(双⾊),4(16⾊),8(256⾊),24(真彩⾊)unsigned long biCompression; //位图的压缩类型,必须是0(⽰不压缩),1(BI_RLE8压缩类型),2(BI_RLE4压缩类型)之⼀unsigned long biSizeImage; //位图⼤⼩以字节为单位long biXPixPerMeter; //图像⽔平分辨率,每⽶像素数long biYPixPerMeter; //图像垂直分辨率,每⽶像素数unsigned long biClrUsed; //位图实际使⽤的颜⾊表中的颜⾊数unsigned long biClrImporant; //位图显⽰过程中重要的颜⾊数}BITMAPINFOHEADER; //共40Bytestruct buffer {void *start;size_t length;};#define CLEAR(x) memset(&(x), 0, sizeof(x))static void xioctl(int fh, int request, void *arg){int r;do {r = ioctl(fh, request, arg);} while (r == -1 && ((errno == EINTR) || (errno == EAGAIN)));if (r == -1) {fprintf(stderr, "error %d, %s\n", errno, strerror(errno));exit(EXIT_FAILURE);}}void saveImage(void *data,int imageWidth,int imageHeight){BITMAPFILEHEADER *bitmapFileHeader;BITMAPINFOHEADER *bitmapInfoHeader;FILE *fp;if((fp=fopen("2345.bmp", "wb"))==NULL){fprintf(stderr, "file cannot open\n");exit(1);}bitmapFileHeader=(BITMAPFILEHEADER *)malloc(sizeof(BITMAPFILEHEADER));bitmapInfoHeader=(BITMAPINFOHEADER *)malloc(sizeof(BITMAPINFOHEADER));printf("%d\n",sizeof( bitmapFileHeader->bfType[2]));bitmapFileHeader->bfType[0] = 'B';bitmapFileHeader->bfType[1] = 'M';bitmapFileHeader->bfReserved1 = 0x0000;bitmapFileHeader->bfReserved2 = 0x0000;bitmapFileHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); bitmapInfoHeader->biSize = sizeof(BITMAPINFOHEADER);bitmapInfoHeader->biWidth = (long)2592;bitmapInfoHeader->biHeight = (long)-1944;bitmapInfoHeader->biPlanes = 0x0001;bitmapInfoHeader->biBitCount = 0x0018; //24位图bitmapInfoHeader->biCompression = 0x0000; //不压缩bitmapInfoHeader->biSizeImage = -bitmapInfoHeader->biWidth*bitmapInfoHeader->biHeight * 3; bitmapInfoHeader->biXPixPerMeter = 3780; /*96dpi*/bitmapInfoHeader->biYPixPerMeter = 3780; /*96dpi*/bitmapInfoHeader->biClrUsed = 0;bitmapInfoHeader->biClrImporant = 0;bitmapFileHeader->bfSize = bitmapFileHeader->bfOffBits + bitmapInfoHeader->biSizeImage; fwrite((unsigned char *)bitmapFileHeader->bfType, 2, 1, fp);fwrite((unsigned char *)&bitmapFileHeader->bfSize, 4, 1, fp);fwrite((unsigned char *)&bitmapFileHeader->bfReserved1, 2, 1, fp);fwrite((unsigned char *)&bitmapFileHeader->bfReserved2, 2, 1, fp);fwrite((unsigned char *)&bitmapFileHeader->bfOffBits, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biSize, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biWidth, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biHeight, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biPlanes, 2, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biBitCount, 2, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biCompression, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biSizeImage, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biXPixPerMeter, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biYPixPerMeter, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biClrUsed, 4, 1, fp);fwrite((unsigned char *)&bitmapInfoHeader->biClrImporant, 4, 1, fp);printf("white image header success\n");char *buffer=(char *)malloc(imageWidth*imageHeight*3);char *ch=(char *)data;unsigned char r,g,b;union NUM{int number;char str[4];}num;int k;for(int i=0,j=0;i<1944;i+=2){for(j=0;j<2592;j+=2){r=ch[i*2592+j];g=ch[i*2592+j+1];b=ch[i*2592+2592+j+1];buffer[i*2592*3+j*3+2]=b;buffer[(i+1)*2592*3+j*3+2]=b;buffer[i*2592*3+j*3+5]=b;buffer[(i+1)*2592*3+j*3+5]=b;buffer[i*2592*3+j*3+1]=g;buffer[(i+1)*2592*3+j*3+1]=g;buffer[i*2592*3+j*3+4]=g;buffer[(i+1)*2592*3+j*3+4]=g;buffer[i*2592*3+j*3]=r;buffer[(i+1)*2592*3+j*3]=r;buffer[i*2592*3+j*3+3]=r;buffer[(i+1)*2592*3+j*3+3]=r;}}printf("convert bayer data to rgb888 success\n");fwrite(buffer,imageWidth*imageHeight*3,1,fp);printf("write data to image success\n");fclose(fp);}int grabberandprocess(char*dev_name, int imageWidth, int imageHeight) {struct v4l2_format fmt;struct v4l2_buffer buf;struct v4l2_requestbuffers req;enum v4l2_buf_type type;fd_set fds;struct timeval tv;int r, fd = -1;unsigned int i, n_buffers;struct buffer *buffers;fd = open(dev_name, O_RDWR | O_NONBLOCK, 0);if (fd < 0) {perror("Cannot open device");exit(EXIT_FAILURE);}CLEAR(fmt);fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width = imageWidth;fmt.fmt.pix.height = imageHeight;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_GREY;fmt.fmt.pix.field = V4L2_FIELD_ANY;xioctl(fd, VIDIOC_S_FMT, &fmt);//VIDIOC_S_FMT set the video capture formatif (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_GREY){printf("Libv4l didn't accept GREY format. Can't proceed.\n");exit(EXIT_FAILURE);}elseprintf("set GREY OK!\n");if ((fmt.fmt.pix.width != imageWidth) || (fmt.fmt.pix.height != imageHeight))printf("Warning: driver is sending image at %dx%d\n", fmt.fmt.pix.width, fmt.fmt.pix.height); elseprintf("set resolution OK!\n");CLEAR(req);//亮度设置struct v4l2_control control_s;control_s.id=V4L2_CID_BRIGHTNESS;control_s.value=20;ioctl(fd,VIDIOC_S_CTRL,&control_s);//曝光值control_s.id=V4L2_CID_EXPOSURE_AUTO;control_s.value=V4L2_EXPOSURE_MANUAL;ioctl(fd,VIDIOC_S_CTRL,&control_s);control_s.id=V4L2_CID_EXPOSURE_ABSOLUTE;control_s.value=1200;ioctl(fd,VIDIOC_S_CTRL,&control_s);//⾃动曝光/*control_s.id = V4L2_CID_EXPOSURE_AUTO;control_s.value = V4L2_EXPOSURE_APERTURE_PRIORITY;ioctl(fd, VIDIOC_S_CTRL, &control_s);*///⾃动⽩平衡control_s.id=V4L2_CID_AUTO_WHITE_BALANCE;control_s.value=1;ioctl(fd,VIDIOC_S_CTRL,&control_s);//⼿动⽩平衡/*control_s.id = V4L2_CID_AUTO_WHITE_BALANCE;control_s.value = 0;ioctl(fd, VIDIOC_S_CTRL, &control_s);//设置⽩平衡值control_s.id = V4L2_CID_WHITE_BALANCE_TEMPERATURE;control_s.value = 4600;ioctl(fd, VIDIOC_S_CTRL, &control_s);*///对⽐度control_s.id=V4L2_CID_CONTRAST;control_s.value=32;ioctl(fd,VIDIOC_S_CTRL,&control_s);//增益control_s.id=V4L2_CID_GAIN;control_s.value=0;ioctl(fd,VIDIOC_S_CTRL,&control_s);req.count = 3;req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;req.memory = V4L2_MEMORY_MMAP;xioctl(fd, VIDIOC_REQBUFS, &req);//VIDIOC_REQBUFS request buffersbuffers = (struct buffer*)calloc(req.count, sizeof(*buffers));for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {CLEAR(buf);buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = n_buffers;xioctl(fd, VIDIOC_QUERYBUF, &buf);buffers[n_buffers].length = buf.length;buffers[n_buffers].start = mmap(NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED,fd, buf.m.offset);if (MAP_FAILED == buffers[n_buffers].start) {perror("mmap");exit(EXIT_FAILURE);}xioctl(fd, VIDIOC_QBUF, &buf);//read data from buffer}type = V4L2_BUF_TYPE_VIDEO_CAPTURE;xioctl(fd, VIDIOC_STREAMON, &type);//open video display functionbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;__u32 shouldused;shouldused = imageWidth*imageHeight;do{xioctl(fd, VIDIOC_DQBUF, &buf);//put back the data to buffer}while(buf.bytesused != shouldused);saveImage(buffers[buf.index].start,imageWidth,imageHeight);xioctl(fd, VIDIOC_QBUF, &buf);//read data from buffertype = V4L2_BUF_TYPE_VIDEO_CAPTURE;xioctl(fd, VIDIOC_STREAMOFF, &type);//close video display functionfor (i = 0; i < n_buffers; ++i){munmap(buffers[i].start, buffers[i].length);}close(fd);return0;}int main(int argc, char **argv) {int imageWidth = 2592;int imageHeight = 1944;if (argc == 3) {//printf("Usage: ./webcam [outputImageWidth] [outputImageHeight]\nE.g. ./webcam 1920 1280\n");imageWidth = atoi(argv[1]);imageHeight = atoi(argv[2]);}char device[]="/dev/video0";grabberandprocess(device,imageWidth, imageHeight);}。
【理论知识】PS必须掌握的七大调色模式
【理论知识】PS必须掌握的七大调色模式在photoshop学习中,我们经常遇到RGB色彩模式,CMYK、HSB等色彩模式,但是我们不不清楚他们之前有什么区别以及他们的使用范围。
其中,我们在学习和使用中RGB色彩模式跟CMYK色彩模式最常见。
什么是图像的色彩模式:色彩模式是数字世界中表示颜色的一种算法。
在数字世界中,为了表示各种颜色,人们通常将颜色划分为若干分量。
由于成色原理的不同,决定了显示器、投影仪、扫描仪这类靠色光直接合成颜色的颜色设备和打印机、印刷机这类靠使用颜料的印刷设备在生成颜色方式上的区别。
常见的7大图像色彩模式:(1)RGB彩色模式:又叫加色模式,是屏幕显示的最佳颜色,由红、绿、蓝三种颜色组成,每一种颜色可以有0-255的亮度变化。
能够组成255*255*255种颜色。
RGB彩色模式适用于显示器、投影仪、扫描仪、数码相机等。
具体RGB色彩模式的换算、颜色搭配等可以参考《RGB色彩模式详解》。
(2)CMYK彩色模式:由品蓝,品红,品黄和黄色组成,又叫减色模式。
CMY是3种印刷油墨名称的首字母:青色Cyan、品红色Magenta、黄色Yellow。
而K取的是black最后一个字母,之所以不取首字母,是为了避免与蓝色(Blue)混淆。
一般打印输出及印刷都是这种模式,所以打印图片一般都采用CMYK模式。
(3)HSB彩色模式:是将色彩分解为色调,饱和度及亮度通过调整色调,饱和度及亮度得到颜色和变化。
在HSB模式中,H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度。
HSB模式对应的媒介是人眼。
(4)Lab彩色模式:这种模式通过一个光强和两个色调来描述一个色调叫a,另一个色调叫b。
它主要影响着色调的明暗。
一般RGB 转换成CMYK都先经Lab的转换。
Lab色彩模型是由亮度L和有关色彩的a, b三个要素组成。
(5)索引颜色:这种颜色下图像像素用一个字节表示它最多包含有256色的色表储存并索引其所用的颜色,它图像质量不高,占空间较少。
RGB颜色参数范文
RGB颜色参数范文RGB是一种用于表示颜色的编码系统,它使用红(Red)、绿(Green)、蓝(Blue)三个基色的强度值来混合生成各种颜色。
每个RGB参数的取值范围是0到255,其中0表示最小强度,255表示最大强度。
1. 红色(Red):该参数表示红色在混合颜色中的强度,取值范围为0到255、当红色参数为0时,显示器上的像素没有红色成分,完全黑色;当红色参数为255时,显示器上的像素纯红色,没有绿色和蓝色成分,完全红色。
2. 绿色(Green):该参数表示绿色在混合颜色中的强度,取值范围为0到255、当绿色参数为0时,显示器上的像素没有绿色成分,完全黑色;当绿色参数为255时,显示器上的像素纯绿色,没有红色和蓝色成分,完全绿色。
3. 蓝色(Blue):该参数表示蓝色在混合颜色中的强度,取值范围为0到255、当蓝色参数为0时,显示器上的像素没有蓝色成分,完全黑色;当蓝色参数为255时,显示器上的像素纯蓝色,没有红色和绿色成分,完全蓝色。
通过调整RGB颜色参数的数值,可以生成无限多种颜色。
例如,纯红色可以通过将RGB参数设置为(255,0,0)来表示,纯绿色可以通过将RGB参数设置为(0,255,0),而纯蓝色可以通过将RGB参数设置为(0,0,255)来表示。
除了调整RGB参数的数值外,还可以调整各个参数之间的比例关系,来生成不同的颜色。
例如,混合红色和绿色可以通过将RGB参数设置为(255,255,0)来表示,这样就生成了黄色。
RGB颜色参数的优点在于其灵活性和广泛的应用范围。
几乎所有的计算机显示器和数字设备都使用RGB颜色编码系统。
此外,由于RGB颜色参数的数值范围是0到255,可以通过简单的数学运算来调整颜色的明暗程度和对比度,使其更适合显示需求。
rgb调色原理
rgb调色原理RGB调色原理。
RGB调色是一种常见的颜色表示方式,它是通过红(Red)、绿(Green)、蓝(Blue)三种颜色的不同组合来呈现出丰富的色彩。
在数字图像处理、显示器、摄影等领域,RGB调色得到了广泛的应用。
本文将介绍RGB调色的原理及其在实际应用中的一些特点。
首先,我们来了解一下RGB调色的基本原理。
在RGB调色中,每种颜色的取值范围为0-255,共256个等级。
通过调节红、绿、蓝三种颜色的不同组合比例,可以产生出各种不同的颜色。
例如,当红、绿、蓝三种颜色的取值均为255时,就会呈现出白色;而当三种颜色的取值均为0时,则呈现出黑色。
通过不同的组合,可以呈现出红、绿、蓝、黄、青、紫等各种颜色,同时也可以呈现出各种亮度和饱和度不同的颜色。
其次,RGB调色在实际应用中具有一些特点。
首先,RGB调色可以呈现出丰富的色彩。
由于红、绿、蓝三种颜色的不同组合可以产生出大量的颜色,因此RGB调色可以呈现出丰富多彩的图像。
其次,RGB调色具有较高的色彩准确性。
在数字图像处理和显示器中,RGB调色可以准确地呈现出图像中的各种颜色,使得图像色彩更加真实自然。
此外,RGB调色还具有良好的兼容性。
由于大多数显示器和数字设备都采用RGB调色,因此RGB调色在不同设备之间具有良好的兼容性,可以保证图像在不同设备上的一致性。
总的来说,RGB调色是一种常见的颜色表示方式,它通过红、绿、蓝三种颜色的不同组合来呈现出丰富的色彩。
在实际应用中,RGB调色具有丰富的色彩、较高的色彩准确性和良好的兼容性等特点,因此得到了广泛的应用。
希望本文对RGB调色原理有所帮助,谢谢阅读!。
RGB565与RGB888的相互转换
RGB565与RGB888的相互转换本文内容不是完全原创,参考了网上部分精华,做了整理。
RGB色彩模式(也翻译为“红绿蓝”,比较少用)是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
就RGB888->RGB565而言:其转换的具体思路如下:(注:只代表个人的方法)1.取RGB888中第一个字节的高5位作为转换后的RGB565的第二个字节的高5位2.取RGB888中第二个字节的高3位作为转换后的RGB565第二个字节的低3位3.取RGB888中第二个字节的第4--6位,作为转换后的RGB565第一个字节的高3位4.取RGB888中第二个字节的第三个字节的高5位作为转换后的RGB565第一个字节的低5位就RGB565->RGB888而言:RGB565的存储方式为:R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B01.取RGB565第一个字节中低5位作为RGB888的高5位2.取RGB565第二个字节中的低3位,将其左移5位,作为RGB888第二个字节的高5位3.取RGB565第一个字节的高3位将其右移3位,作为RGB888第二个字节的4--6位4.取RGB565第二个字节中的高5位作为RGB888第三个字节。
细心地哥们一定会发现如果我们是低位往高位上转的话,就存在一些数据精度的丢失问题,在网上查了写资料,借鉴了一下别人的方法;所谓的量化补偿,讲一下量化压缩与量化补偿吧在进行色彩格式转换的时候,经常会遇到色彩量化位数的改变,比如说从 24bit RGB888到16bit RGB565 的色彩转换。
所谓量化压缩与量化补偿都是我个人所提出的概念,现说明如下。
量化压缩,举例:24bit RGB888 -> 16bit RGB565 的转换24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B016bit RGB656 R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3量化位数从8bit到5bit或6bit,取原8bit的高位,量化上做了压缩,却损失了精度。
基于STM32的硬件RGB888接口实现emWin的快速刷新方案
ZT0001 专题教程
实际测试中发现,将 F429 配置为 16 位色的 RGB565,刷新 800*480 分辨率的图片可以做到 15ms 左右一帧,而测试 24 位色的 RGB888 或者 32 位色的 ARGB8888,竟然需要 200 多 ms。后来经过多次 测试,找到了根本原因,并且在帖子:/read.php?tid=23425 里面进行了详细描 述。 近期,ST 新发布的 STemWin 5.40 版本中加入了 ARGB 格式的库,这个问题得到了解决,本次应用 笔记就是为大家讲解如何使用这个库。(补充,从 emWin5.30 版本开始就支持 ARGB 格式了,但是 ST 发布的 STemWin5.32 设置相应的宏定义没有任何效果,所以官方在 STemWin5.40 中直接推出了 ARGB 格式库)。 STemWin5.40 下载地址:/read.php?tid=37962 。
/* 7. 配置图层 1 的颜色模式和分辨率大小 */ #define COLOR_MODE_0 _CM_RGB565 #define XSIZE_0 XSIZE_PHYS #define YSIZE_0 YSIZE_PHYS /* 8. 配置图层 2 的的颜色模式和分辨率大小 */ #define COLOR_MODE_1 _CM_RGB565 #define XSIZE_1 XSIZE_PHYS #define YSIZE_1 YSIZE_PHYS /* 9. 单图层情况下,根据用户选择的颜色模式可自动选择图层 1 的 emWin 的驱动和颜色模式 */ #if (COLOR_MODE_0 == _CM_ARGB8888) #define COLOR_CONVERSION_0 GUICC_M8888I #define DISPLAY_DRIVER_0 GUIDRV_LIN_32 #elif (COLOR_MODE_0 == _CM_RGB888) #define COLOR_CONVERSION_0 GUICC_M888 #define DISPLAY_DRIVER_0 GUIDRV_LIN_24 #elif (COLOR_MODE_0 == _CM_RGB565) #define COLOR_CONVERSION_0 GUICC_M565 #define DISPLAY_DRIVER_0 GUIDRV_LIN_16 #elif (COLOR_MODE_0 == _CM_ARGB1555) #define COLOR_CONVERSION_0 GUICC_M1555I #define DISPLAY_DRIVER_0 GUIDRV_LIN_16 #elif (COLOR_MODE_0 == _CM_ARGB4444) #define COLOR_CONVERSION_0 GUICC_M4444I #define DISPLAY_DRIVER_0 GUIDRV_LIN_16
图像的格式RGB565,RGB555,RGB888,BMP24
图像的格式RGB565,RGB555,RGB888,BMP24
原文/u/20100112/11/169e5eaa-9ada-493a-8d2c-4bcddb3b2fd6.html
RGB565 是16位的,2个字节,5+6+5,第一字节的前5位是R,后三位+第二字节前三位是G,第二字节后5位是B。
RGB555 也是16位的,2个字节,RGB各5位,有1位未用。
RGB888 是24位的,3个字节。
转换方法可以GOOGLE。
譬如888转565的方法:
一般是用去低位的方法比较快速,如果要考虑到前后的颜色转换失真小,则因该对每个颜色分量进行统计降序排列,取排序在前的。
比如:红色由256级(888)转换到32级(565),则应该将该图片中所有点的红色统计下来,得到一个统计值,取最多的32种红色,其他的取和前面得到的32种红色最相近的代替。
RGB888LVDS
RGB888LVDSRGB概念说明:就模拟信号而言,VGA信号的组成分为五种:RGBHV,分别是红绿蓝三原色和行场同步信号。
VGA传输距离非常短,实际工程中为了传输更远的距离,人们把VGA线拆开,将RGBHV五种信号分离出来,分别用五根同轴电缆传输,这种传输方式叫RGB传输,习惯上这种信号也叫RGB信号,其实本质上RGB和VGA是没有什么区别的。
从数字信号而言,RGB通常被认为是表示为色光三原色,分别为红、绿、蓝,使用加色法,直接通到我们的人眼,比如屏幕显示。
其数值为R:0--255 G、0--255 B、0--255 RGB 值越大,就越亮,所以说当RGB都为255时为白色,相反全为零时为黑色。
RGB接口就是分三原色输入的视频接口,日常都称之为色差分量接口。
从程序编码角度看,RGB是一种颜色表示方法。
对一种颜色进行编码的方法统称为"颜色空间"或"色域"。
用最简单的话说,世界上任何一种颜色的"颜色空间"都可定义成一个固定的数字或变量。
RGB(红、绿、蓝)只是众多颜色空间的一种。
采用这种编码方法,每种颜色都可用三个变量来表示-红色、绿色以及蓝色的强度。
记录及显示彩色图像时,RGB是最常见的一种方案。
但是,它缺乏与早期黑白显示系统的良好兼容性。
因此,件多电子电器厂商普遍采用的做法是,将RGB 转换成YUV颜色空同,以维持兼容,再根据需要换回RGB 格式,以便在电脑显示器上显示彩色图形。
我司EL200光机目前只接受的输入格式为24bit RGB视频输入格式,TTL接口。
TTL 接口属于并行方式传输数据的接口,采用这种接口优点,不必在液晶显示器的驱动板端和液晶面板端使用专用的接口电路,而是由驱动板主控芯片输出的TTL数据信号经电缆线直接传送到液晶面板的输人接口。
缺点是由于TTL接口信号电压高、连线多、传输电缆长,因此,电路的抗干扰能力比较差,而且容易产生电磁干扰(EMI)。
主流色彩模式介绍之RGB色彩模式和CMYK色彩模式-电脑资料
主流色彩模式介绍之RGB色彩模式和CMYK色彩模式-电脑资料RGB色彩模式介绍我们在Photoshop中打开如下左图,打开的方法是通过菜单【文件_打开】或使用快捷键〖CTRL_O〗(有关快捷键的说明将在以后的课程中出现,现在不明白也没有关系),。
也可以直接从Windows目录中拖动图像到Photoshop。
如果Photoshop窗口被遮盖或最小化,也可拖动到其位于任务栏的按钮上,待Photoshop窗口弹出后再拖动到窗口中。
按〖F8〗或从菜单【窗口_信息】调出信息调板。
如下右图。
然后试着在图像中移动鼠标,会看到其中的数值在不断的变化。
注意移动到蓝色区域的时候,会看到B的数值高一些;移动到红色区域的时候则R的数值高一些。
电脑屏幕上的所有颜色,都由这红色绿色蓝色三种色光按照不同的比例混合而成的。
一组红色绿色蓝色就是一个最小的显示单位。
屏幕上的任何一个颜色都可以由一组RGB值来记录和表达。
那么,在下面所看到的最左端的图片实际上是由右方的三个部分组成的。
-因此这红色绿色蓝色又称为三原色光,用英文表示就是R(red)、G(green)、B(blue)。
可以把RGB想象为中国菜里面的糖、盐、味精,任何一道菜都是用这三种调料混合的。
在制作不同的菜时,三者的比例也不相同,甚至可能是迥异的。
因此不同的图像中,RGB各个的成分也不尽相同,可能有的图中R(红色)成分多一些,有的B(蓝色)成分多一些。
做菜的时候,菜谱上会提示类似"糖3克、盐1克"等,来表示调料的多少,在电脑中,RGB的所谓"多少"就是指亮度,并使用整数来表示。
通常情况下,RGB各有256级亮度,用数字表示为从0、1、2...直到255。
注意虽然数字最高是255,但0也是数值之一,因此共256级。
如同2000年到2010年共是11年一样。
按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。
三原色LED对特定彩图照明表现的颜色
三原色LED对特定彩图照明表现的颜色RGB三基色LED三基色是指RGB三种颜色,R=Red,G=Green,B=Blue,通过这三种颜色不同比例的混合,可以显示任何颜色。
全彩的 LED 屏幕就是通过这种单个的 RGB 灯珠集成在一起做成的,一个 LED 就是一个像素,这个像素可以通过程序控制显示任何颜色、任何灰度。
在单片机中是通过 PWM 来实现调色功能,之前学习过 PWM 调光功能,使用 1 个单色 LED,主要功能是亮度变化,如果三种颜色都用 PWM 控制器亮度,就可以混合出不同的比例。
看到的彩色图片一般也会用 RGB 格式表示,比如 24 位彩色,RGB 三种颜色各占 8 位,组成的格式是RGB=888 格式。
每种颜色都有 2 的 8 次方=256 个亮度等级,那么整个像素是可以显示 2 的 24 次方=16777216 种颜色,这就是一个像素可以实现的颜色,位数越高,颜色就分的越细。
另外一种常用格式是 16 位,RGB=565 格式,一个像素可以显示 2 的 16 次方=65536种颜色,这种格式在单片机里面用的非常多,尤其是单片机控制的彩屏。
还有一种格式是18 位,RGB=666 格式,一个像素显示的颜色数量是 2 的 18 次方=262144,以前常听说的 26万色就是说的这种格式。
还是从最基本的说起,既然三基色灯是 3 种颜色灯的组合,那么控制部分也就变得非常明确,1 种颜色用 1 路 PWM,三种颜色就用三路 PWM,很幸运,UNO 有大于 3 路 PWM功能输出,所以还有剩余 PWM 来完成其他功能。
下面是电路图和实物连接他。
同样的 RGB也分共阳和共阴,LED 一共 4 个有效引脚,1 个公共端,另外 3 个是三种颜色的另外一端。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RGB555(5+5+5=15位色):(2^5)*(2^5)*(2^5)=32*32*32=32768(32768/1024=32, 32K Color)。俗称32千色
RGB565(5+6+5=16位色):(2^5)*(2^6)*(2^5)=32*64*32=65536(65536/1024=32, 64K Color)。俗称65千色
真彩色是指图像中的每个像素值都分成R(红)、G(绿)、B(蓝)三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为彩色。彩色图像是一种用三个或更多字节描述像素的计算机图像存储方式。
普遍认为人眼对色彩的分辨能力大致是一千万色,因此由RGB888形成的图像称做真彩色。RGB888真彩色,每一色光以8位元表示,每个通道各有256级阶调,三色光交互增减,RGB三色光能在一个像素上最高显示24位1677万色(256*256*256=16,777,216),这个数值就是电脑所能表示的最高色彩。
RGB666(6+6+6=18位色):(2^6)*(2^6)*(2^6)=64*64*64=262144(262144/1024=256, 256K Color)。俗称262千色
RGB888(8+8+8=24位色):(2^8)*(2^8)*(2^8)=256*256*256=16777216(16777216/1024=16384, 16384K Color; 16384/1024=16, 16M Color)。俗称16兆真彩色
RGB888+8(8+8+8+8=32位色):
除了24位真彩色,现在还出现了32位真彩色(RGB888+8)。32位真彩色并非是2的32次方的发色的灰度,为了方便称呼,就规定它为32位色。它是24位发色数再加上256阶灰度等级。