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