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

Whats differece between SFML Image.Pixels and FIle.ReadAllBytes

当我试图理解 SFML 时,我尝试用 RenderWindowInstanse.SetIcon() 设置一个图标 该方法需要 3 个参数,前两个是大小,3 - byte[],然后我尝试使用 File.ReadAllBytes() 和 c# 中的相同工具,但那不起作用,我在现场搜索并找到 ImageInstanse.Pixels 属性 那个 returns byte[] 就像一个参数,这是有效的,但我不知道不明白为什么他们返回不同的字节数组

在 SFML.NET 中,Image.Pixels returns 一个字节数组,它们是组织良好的 RGBA 像素值,代表内存中的图像。

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


每个文件都有一个 format that defines the layout and meaning of the bytes that make up that file. Image files are an extension of that concept as there any many different file formats for images。图像的像素数据必须根据其保存的格式进行编码(and/or压缩)。这意味着文件中的字节不再与计算机内存中的原始 RGBA 像素数据匹配。

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

当您使用 File.ReadAllBytes() 时,您会得到一个数组中表示此数据的所有字节,并且您必须确切知道每个索引处的字节的含义。

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