彩色显示器的红绿蓝三基色分别使用6个二进制表示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了彩色显示器的红绿蓝三基色分别使用6个二进制表示相关的知识,希望对你有一定的参考价值。

若彩色显示器的红绿蓝三基色分别使用6个二进制表示,那么它大约可以显示多少种不同的颜色

彩色显示器的红绿蓝三基色分别使用6个二进制表示,三种基色并在一起有65535的三次方种颜色共65536种颜色。

4个二进位能够表示0~~16之间的16个数值,然后有三种基色,排列组合能够得到16的三次方4096种值,每一个值就代表一种颜色。

R最多表示8种颜色:2*2*2=8,因为每个位最多能表示两个数,即0和1;同理,G和B也分别表示8种颜色,那么,显示器中表示的颜色为8*8*8=512。

6+6+4=16位,因为是2进制,所以2^16=65536。

64*64*16=65536。

彩色显示器的彩色是由三基色合成而得到的,某显示器的三基色R、G...:26万种R、G、B分别使用6个二进位表示,那么就是以2为基础6通道,就是2的6次方,即64.所以RGB模型的显示系统可以显示64*64*64=262144色,即26万种。

R=G=B=255时,用ffffff表示;R=G=B=128时,用808080表示,R=G=B=0时,用000000表示。

若一台显示器中r,g,b分别用3位二进制数来表示,那么它可以显示:r最多表示8种颜色:2*2*2=8,因为每个位最多能表示两个数,即0和1;同理,g和b也分别表示8种颜色,那么显示器中表示的颜色为8*8*8=512。

三基色原理,即红、绿、蓝三种颜色,通俗地讲就是利用这三种颜色可以组成我们所能见到的所有颜色.将R,G,B三基色信号转换成Y,R-Y,B-Y信号是为了利用它的优点进行传输。

扩展资料:

自然界中的绝大部分彩色,都可以由三种基色按一定比例混合得到;反之,任意一种彩色均可被分解为三种基色。作为基色的三种彩色,要相互独立,即其中任何一种基色都不能由另外两种基色混合来产生。

由三基色混合而得到的彩色光的亮度等于参与混合的各基色的亮度之和。三基色的比例决定了混合色的色调和色饱和度。

在中学的物理课中我们可能做过棱镜的试验,白光通过棱镜后被分解成多种颜色逐渐过渡的色谱,色依次为红、橙、黄、绿、蓝、靛、紫,这就是可见光谱。

其中人眼对红绿蓝三色最为敏感,人的眼睛就像一个三频接收器的体系,任何一种基色都不能由其它两种颜色合成。红绿蓝是三基色,这三种颜色合成的颜色范围最为广泛。红绿蓝三基色按照不同的比例相加合成混色称为相加混色。

参考资料:百度百科-三基色

参考技术A 8位二进制可以有256种不同的值。所以彩色就有256的3次方,等于16777216种不同的颜色。足够表示需要的色彩了。 参考技术B 因为像素深度等于像素所有颜色的二进位数之和。
所以像素深度=6+6+6=18
又因为颜色总数=2像素深度次方
即颜色总数为2的16次方=262144
参考技术C 6个二进制?
什么意思
6个字节?每个基色2个字节?
如果是这样的话那就是
每个字节8位 两个字节16位
所以每个基色有2的16次方种 即65535种
三种基色并在一起有65535的三次方种颜色 共281462092005375种本回答被提问者采纳
参考技术D 在电脑中颜色是由3个byte数据组成的(R,G,B),每个byte可以存0-255的数值(有256种),所以256*256*256=16777216

纠正lz用词:6个二进制(0-1) 6个十六进制(0-F)

立方体贴图上的 OpenGL 奇怪的红绿蓝线并重复三次

【中文标题】立方体贴图上的 OpenGL 奇怪的红绿蓝线并重复三次【英文标题】:OpenGL Weird Red Green and Blue Lines on Cube Map and Repeating Three Times 【发布时间】:2016-09-27 17:10:30 【问题描述】:

请查看以下图片:

我不知道为什么会这样,只是没有意义,我一遍又一遍地检查它,它一直显示相同的东西,天空盒的每一侧都有三个相同的图像和红色,绿色和蓝色的条纹沿着它们向下延伸。

我做错了什么?

顶点着色器:

#version 400
in vec3 position;

uniform mat4 mvp;
out vec3 tex;
void main(void) 
    gl_Position = mvp * vec4(position, 1.0);
    tex = position;

片段着色器:

#version 400
uniform samplerCube defuse;
in vec3 tex;

out vec4 out_Color;
void main(void) 
    out_Color = texture(defuse, tex);

CubeMap 加载器

GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture);

int width, height, numComponents;
unsigned char* imageData = stbi_load((path.getURL() + "posx.png").c_str(), &width, &height, &numComponents, 4);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
stbi_image_free(imageData);
imageData = stbi_load((path.getURL() + "posy.png").c_str(), &width, &height, &numComponents, 4);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
stbi_image_free(imageData);
imageData = stbi_load((path.getURL() + "posz.png").c_str(), &width, &height, &numComponents, 4);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
stbi_image_free(imageData);
imageData = stbi_load((path.getURL() + "negx.png").c_str(), &width, &height, &numComponents, 4);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
stbi_image_free(imageData);
imageData = stbi_load((path.getURL() + "negy.png").c_str(), &width, &height, &numComponents, 4);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
stbi_image_free(imageData);
imageData = stbi_load((path.getURL() + "negz.png").c_str(), &width, &height, &numComponents, 4);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
stbi_image_free(imageData);

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAX_LEVEL, 0);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
return new GLTexture(texture);

【问题讨论】:

您将 stbi_load 4 作为最后一个参数传递,这意味着图像将被转换为具有 4 个组件(如果我理解正确的话),但您告诉 openGL 您的图像只有 RGB(3 个组件)。如果您能告诉我们您使用的是什么 OpenGL 版本,那会更好吗? (或直到你被允许使用) 将其更改为 GL_RGBA 已修复!感谢您的帮助:) 我已将其发布为答案。 【参考方案1】:

您指定 stbi 以加载具有 4 个组件的纹理 - 所需的组件数是 stbi_load 的最后一个参数。您还向 OpenGL 指定纹理是 GL_RGB,但事实并非如此。解决此问题的方法是将 OpenGL 的纹理指定为 GL_RGBA 或将纹理解码为 3 个组件。

【讨论】:

以上是关于彩色显示器的红绿蓝三基色分别使用6个二进制表示的主要内容,如果未能解决你的问题,请参考以下文章

CRT彩色显示器呈现彩色的原理

立方体贴图上的 OpenGL 奇怪的红绿蓝线并重复三次

计算机概论速读是的问题

YUV与RGB视频采样

RGB与HSV颜色空间

计算机视觉的分类