像素格式

像素格式(pixel format)像素色彩按分量的大小和排列。这种格式以每个像素所使用的总位数以及用于存储像素色彩的红、绿、蓝和 alpha 分量的位数指定。

像素格式描述了像素数据存储所用的格式。定义了像素在内存中的编码方式。下面的像素格式 (PF_*) 类型定义了:
本地格式 (PF_A8R8G8B8 以及其他大量的不同的类型)

本地格式
这意味着在内存中使用了本地储存方式(big endian或者little endian,包括16,24,32位)的整形数据。同时意味着可以把PF_A8R8G8B8格式的图片看作一个32位的整形数组,在16进制表现为0xAARRGGBB。这些字母的意义我们在稍后会提供。
位组格式Byte formats(PF_BYTE_*)
在这种格式下每个通道对应一个byte,通道在内存理的组织方式和格式名称定义的相同。例如PF_BYTE_RGBA格式的像素包含了四个byte,一个对应红色,一个绿色,一个蓝色,以及一个alpha通道。
Short格式(PF_SHORT_*)
在这种格式下每个通道对应一个unsigned short数据(16 bit整型),通道在内存里的组织方式和格式名称定义的相同。例如PF_BYTE_RGBA格式的像素包含了四个unsigned short数据,一个对应红色,一个绿色,一个蓝色,以及一个alpha通道。
Float16 格式(PF_FLOAT16_*)
在这种格式下每个通道对应一个16 bit浮点数,通道在内存理的组织方式和格式名称定义的相同。例如PF_BYTE_RGBA格式的像素包含了四个16 bit浮点数数据,一个对应红色,一个绿色,一个蓝色,以及一个alpha通道。16 bit浮点数也被称为半浮点(half float),非常类似于IEEE 对32bit单精度浮点数标准,只不过它只有5个exponent位和10个mantissa位而已。值得注意,这并不是一个标准的C++数据,CPU对其支持也不够好,不过GPU却能如同处理32bit浮点数一样高效的处理它。
Float32格式(PF_FLOAT32_*)
在这种格式下每个通道对应一个32 bit浮点数,通道在内存理的组织方式和格式名称定义的相同。例如PF_BYTE_RGBA格式的像素包含了四个32 bit浮点数数据,一个对应红色,一个绿色,一个蓝色,以及一个alpha通道。在C++中,这个数据就是普通的float。just “float”。
压缩格式formats (PF_DXT[1-5])
S3TC压缩纹理格式。

颜色通道

颜色通道中R,G,B,A,L 以及 X 的意义是:
R
红色成分,通常范围从0.0(没有红色)到1.0(全部的红色)。
G
绿色成分,通常范围从0.0(没有绿色)到1.0(全部的绿色)。
B
蓝色成分,通常范围从0.0(没有蓝色)到1.0(全部的蓝色)。
A
alpha(不透明度)成分,通常范围从0.0(完全透明)到1.0(不透明)。
L
亮度成分,通常范围从0.0(黑暗)到1.0(全白)。最终这个成分会被分散到RGB每个中完成最终的图像效果。
X
这个是被系统忽略的成分。
对于RGBL通道来说,默认的情况下设置为0。而Alpha通道却不同,在默认的情况下被设定为1,代表不透明。

全部格式

位组格式
PF_BYTE_RGB, PF_BYTE_BGR, PF_BYTE_BGRA, PF_BYTE_RGBA, PF_BYTE_L, PF_BYTE_LA, PF_BYTE_A
Short格式
PF_SHORT_RGBA
Float16 格式
PF_FLOAT16_R, PF_FLOAT16_RGB, PF_FLOAT16_RGBA
Float32 格式
PF_FLOAT32_R, PF_FLOAT32_RGB, PF_FLOAT32_RGBA
bit 本地格式
PF_L8, PF_A8, PF_A4L4, PF_R3G3B2
bit 本地格式
PF_L16, PF_R5G6B5, PF_B5G6R5, PF_A4R4G4B4, PF_A1R5G5B5
bit 本地格式
PF_R8G8B8, PF_B8G8R8
bit 本地格式
PF_A8R8G8B8, PF_A8B8G8R8, PF_B8G8R8A8, PF_R8G8B8A8, PF_X8R8G8B8, PF_X8B8G8R8, PF_A2R10G10B10 PF_A2B10G10R10
压缩格式
PF_DXT1, PF_DXT2, PF_DXT3, PF_DXT4, PF_DXT5

格式笔记

NUKE:
nuke的图像数据保存在channel中,我们只需要用到其中的r,g,b三个channel。这三个channel是相互独立的,可以分别从中读取数据,每一次可以读取图像的一行像素。这样看来,最合理的线性存储方式就是每个channel的数据作为一组来保存,即:RRRR…RRRRGGGG…GGGGBBBB…BBBB的形似。
FFMPEG:
ffmpeg支持的编码比较多,如果按照像素格式来分,主要有两类,一类是是RGB,另一类是YUV。对于影像类编码,比如xvid/mpeg4之类,颜色模式只能是YUV,甚至仅仅支持yuv420p这一种。因为要考虑到与nuke相结合,这里只看rgb像素格式中的rgb24。rgb24的线性格式为:RRRR…RRRRGGGG…GGGGBBBB…BBBB,可以很方便的和nuke中的channel数据结合。
ffmpeg提供了一个函数可以在各种像素格式之间转换。yuv420p的Cr和Cb分量只有Y分量大小的一半,因此需要的空间只有rgb24的2/3。
libquicktime:
libquicktime中没有与上面RGB24一致的原始rgb格式,有一种rgb888格式。其线性格式为:RGBRGBRGB…。libquicktime在保存帧的时候也要先将rgb转换为yuv,不过这个过程是自动完成的。
从rgb24到rgb888的转换:
pFrameBufferLinear[y*w*3+3*x] = pFrameRGB_r[Y*w+i]; //R
pFrameBufferLinear[y*w*3+3*x+1] = pFrameRGB_g[Y*w+i]; //G
pFrameBufferLinear[y*w*3+3*x+2] = pFrameRGB_b[Y*w+i]; //B

WPF格式

在WPF中,图像的像素格式较之于GDI+中有不少变化。比如新增了CMYK印刷通道的支持,对灰度图片的灰阶支持也有长足的进步,在颜色空间方面,新增了scRGB颜色空间,使图像的色彩处理能力有很大的提高。
为了方便加深了解,我将它们按格式性质和色彩空间大致进行了分类。比如将Gray类的放在一起,将Index类的又放在一起….
(1) BlackWhite:
用于显示黑白两种色值的像素格式(非黑即白)。
(2) Gray2:
2BPP(Bits Per Pixel,位/像素)的灰色通道。允许四种灰阶。
(3) Gray4:
4BPP的灰度通道,允许16种灰阶值表示灰色。
(4) Gray8:
显示8BPP的灰度通道,允许256种灰阶值表示灰色。
(5) Gray16:
16BPP的灰色通道,最多允许65536种灰阶值表示灰色。这种格式的Gamma是1.0。
(6) Gray32Float:
32BPP的灰度通道,允许超过40亿灰阶。此格式的Gamma值是1.0。
(7) Indexed1:
指定2种颜色作为调色板的像素格式。
(8) Indexed2:
指定4种颜色作为调色板的像素格式。
(9) Indexed4:
指定16种颜色作为调色板的像素格式。
(10) Indexed8:
指定256种颜色作为调色板的像素格式。
(11) Bgr24:
Bgr24像素格式是一种采用24BPP的sRGB格式。 每个颜色通道(蓝色blue, 绿色green, 红色red)各占8BPP(位/像素)。
(12) Bgra32:
Bgra32像素格式是一种32BPP的sRGB格式。每个颜色通道(蓝色blue, 绿色green, 红色red)各占8BPP(位/像素),与Bgr24不同的是,它还有用于表现不透明度的alpha通道(8BPP)。
(13) Bgr101010:
Bgr101010像素格式是一种采用32BPP(位/像素)的sRGB格式。每个颜色通道(蓝色blue, 绿色green, 红色red)各占10BPP(位/像素)。
(14) Bgr32:
Bgr32像素格式是一种采用32BPP(位/像素)的sRGB格式。与Bgr101010格式不同的是,它的每个颜色通道(蓝色blue, 绿色green, 红色red)各占8BPP(位/像素)。
(15) Bgr555:
Bgr555也是一种sRGB格式,它采用16BPP(位/像素). 它的每个颜色通道(蓝色blue, 绿色green, 红色red)各占5BPP(位/像素)。
(16) Bgr565:
Bgr565像素格式是一种16BPP(位/像素)的sRGB格式。它的每个颜色通道(蓝色blue, 绿色green, 红色red)分别占5BPP,6BPP,5BPP(位/像素)。
(17) Pbgra32:
采用32BPP的一种基于sRGB的像素格式。每个颜色通道(蓝色blue, 绿色green, 红色red,Alpha通道)各占8BPP(位/像素)。每种颜色通道是经过与Alpha值预处理之后的。
(18) Prgba64:
是一种基于sRGB格式,采用64BPP。每个颜色通道(蓝色blue, 绿色green, 红色red,Alpha通道)各占32BPP(位/像素)。每种颜色通道是经过与Alpha值预处理之后的。这种格式的Gamma是1.0。
(19) Rgb24:
是一种基于sRGB格式,采用24BPP。每个颜色通道(蓝色blue, 绿色green, 红色red)各占8BPP(位/像素)。
(20) Rgb48:
是一种基于sRGB格式,采用48BPP。每个颜色通道(蓝色blue, 绿色green, 红色red)各占16BPP(位/像素)。这种格式的Gamma是1.0。
(21) Rgba64:
是一种基于sRGB格式,采用64BPP。每个颜色通道(蓝色blue, 绿色green, 红色red,Alpha通道)各占16BPP(位/像素)。这种格式的Gamma是1.0。
(22) Rgb128Float:
是一种基于ScRGB格式,采用128BPP。每个颜色通道各占32BPP(位/像素)。这种格式的Gamma是1.0。
(23) Rgba128Float:
是一种基于ScRGB格式,采用128BPP。每个颜色通道(蓝色blue, 绿色green, 红色red,Alpha通道)各占32BPP(位/像素)。这种格式的Gamma是1.0。
(24) Prgba128Float:
是一种基于ScRGB格式,采用128BPP。每个颜色通道(蓝色blue, 绿色green, 红色red,Alpha通道)各占32BPP(位/像素)。每种颜色通道是经过与Alpha值预处理之后的。这种格式的Gamma是1.0。
(25) Cmyk32:
用于表现印刷色格式,采用32BPP,共四个颜色通道即C、M、Y、K(青色Cyan, 品红Magenta, 黄色Yellow和黑色blacK),各占8PP。

时间: 2024-10-27 01:48:12

像素格式的相关文章

对索引像素格式的图片进行Setpixel(具有索引像素格式的图像不支持SetPixel解决方案)

最近编写了一个验证码识别软件.其中对png.jpg图片进行二值化处理时,出现了错误:具有索引像素格式的图像不支持SetPixel解决方案.从字面上来看,这说明我对一个具有索引色的图片进行了直接RGB颜色设置,而索引色图片的颜色来自调色板,所以这操作是非法的.看见网上的解决方法都不靠谱,特写此文,以助新手. 若是C++中,我会将调色板偏移分析,然后对颜色数组进行一下转换.但是在功能强大的.Net中,显然无需这么做:Bitmap对象自带Clone()函数.我只要Clone一个Bitmap对象,并将P

[cocos2d-x]OPENGL ES支持的像素格式

OPENGL ES最多支持32位颜色值. 支持的像素格式有以下几种: 客户端格式 GL格式 GL数据类型 字节数 RGBA8888 GL_RGBA GL_UNSIGNED_BYTE 4 RGB888 GL_RGB GL_UNSIGNED_BYTE 3 RGB5A1 GL_RGBA GL_UNSIGNED_SHORT_5_5_5_1 2 RGB565 GL_RGB GL_UNSIGNED_SHORT_5_6_5 2 RGBA4444 GL_RGBA GL_UNSIGNED_SHORT_4_4_4_

lcd中像素深度bpp和像素格式(比如RGB,YUV)的关系

像素深度(bits per pixel,简称bpp) 一个像素的颜色在计算机中由多少个字节数据来描述.计算机中用二进制位来表示一个像素的数据,用来表示一个像素的数据位越多,则这个像素的颜色值更加丰富.分的更细,颜色深度就更深. 一般来说像素深度有这么几种:1位.8位.16位.24位.32位. 像素格式(pixel format)像素色彩按分量的大小和排列.这种格式以每个像素所使用的总位数以及用于存储像素色彩的红.绿.蓝和 alpha 分量的位数指定. 比如RGB565, RGB24, RGB32

无法从带有索引像素格式的图像创建graphics对象(转)

大家在用 .NET 做图片水印功能的时候, 很可能会遇到 “无法从带有索引像素格式的图像创建graphics对象”这个错误,对应的英文错误提示是“A Graphics object cannot be created from an image that has an indexed pixel format" 这个exception是出现在 System.Drawing.Graphics g = System.Drawing.Graphics.FromImage("图片路径"

《绘图前设置:像素格式——PIXELFORMATDESCRIPT、设备上下文、渲染上下文》

  像素格式——PIXELFORMATDESCRIPT.设备上下文.渲染上下文 在OpenGL对窗口进行渲染之前,必须根据渲染需要对窗口进行配置. 需要硬件渲染还是软件渲染? 渲染使用但缓冲还是双缓冲模式? 是否需要深度缓冲区? 是否需要模板.目标Alpha或累计缓冲区? 当为窗口设置这些参数之后,就无法对它们进行修改.为了从一个只有深度缓冲区和颜色缓冲区的窗口切换到一个带有模板缓冲区的窗口,必须销毁第一个窗口,然后根据需要重新创建一个窗口. 像素格式是OpenGL窗口的重要属性,它包括是否使用

FFmpeg(10)-基于FFmpeg进行像素格式转换(sws_getCachedContext(), sws_scale())

一.包含头文件和库文件 像素格式的相关函数包含在 libswscale.so 库中,CMakeLists需要做下列改动: # swscale add_library(swscale SHARED IMPORTED) set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${FF}/libswscale.so) target_link_libraries target_link_libraries( # Specifies the t

FFMPEG的像素格式

pixel format definitions More... #include "libavutil/avconfig.h"#include "version.h"#include "old_pix_fmts.h" Go to the source code of this file. Macros #define  AVPALETTE_SIZE   1024   #define  AVPALETTE_COUNT   256   #defin

PixelFormat 像素格式

enum PixelFormat Pixel formats available for Format7 modes. Enumerator: PIXEL_FORMAT_MONO8  8 bits of mono information. PIXEL_FORMAT_411YUV8  YUV 4:1:1. PIXEL_FORMAT_422YUV8  YUV 4:2:2. PIXEL_FORMAT_444YUV8  YUV 4:4:4. PIXEL_FORMAT_RGB8  R = G = B =

c#图像处理入门(-bitmap类和图像像素值获取方法)

c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色. 2. PixelFormat属性:返回图像的像素格式. 3. Palette属性:获取和设置图像所使用的颜色调色板. 4. Height Width属性:返回图像的高度和