2

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

4

1 回答 1

1

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

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


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

文件通常包含大量额外字节,用于文件头、元数据、压缩信息,甚至可能是文件中较小文件或图像的数据块的索引。

当你使用 时File.ReadAllBytes(),你会得到一个数组中代表这个数据的所有字节,你必须确切地知道每个索引处字节的含义是什么。

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

于 2020-01-17T21:59:13.947 回答