【问题标题】:Whats differece between SFML Image.Pixels and FIle.ReadAllBytesSFML Image.Pixels 和 FIle.ReadAllBytes 有什么区别
【发布时间】:2020-05-04 18:35:37
【问题描述】:

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

【问题讨论】:

  • 图像文件经过编码和(可能)压缩,因此您从文件中读取的字节不是像素值。

标签: c# sfml sfml.net


【解决方案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 像素数据。

【讨论】:

    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多