SFML Image.Pixels和FIle.ReadAllBytes之间有什么区别

时间:2020-01-17 20:50:48

标签: c# sfml sfml.net

当我尝试了解SFML时,我尝试使用RenderWindowInstanse.SetIcon()设置图标 该方法需要3个参数,第2个是大小,即3-byte [],然后我尝试使用File.ReadAllBytes() 和c#中的相同工具,但是不起作用,我搜索并找到了现场ImageInstanse.Pixels属性,该属性像参数一样返回byte[],这是可行的,但是我不明白为什么它们会返回不同的值字节数组

1 个答案:

答案 0 :(得分:1)

在SFML.NET中,Image.Pixels返回一个字节数组,这些字节是组织良好的RGBA像素值,代表了内存中的图像。

.NET自己的File.ReadAllBytes()函数返回来自系统存储设备中文件本身的字节。


每个文件都有一个format,它定义了组成该文件的字节的布局和含义。图像文件是该概念的扩展,因为有许多不同的file formats for images。图像的像素数据必须根据其保存为的格式进行编码(和/或压缩)。这意味着文件中的字节不再与计算机内存中的原始RGBA像素数据匹配。

文件通常包含很多额外的字节,用于存储file header,元数据,压缩信息,甚至可能是较小文件或文件内图像的数据块的索引。

使用File.ReadAllBytes()时,将获得代表数组中该数据的所有字节,并且您必须确切知道每个索引处的字节的含义。

SFML了解如何解码许多不同的图像格式,并将读取文件的字节并将其处理为像素数据数组。这就是Image的构造函数在后台执行的操作。拥有SFML.Graphics.Image实例后,就可以使用其Pixels属性来访问解码后的 RGBA像素数据。