我试图弄清楚如何加载 PNG 图像并创建一个包含每个像素的 RGB 值的矩阵。我目前正在使用以下方法来加载文件并获取各种 RGB 值:
def to_pixels
File.open(@file, 'r') do |file|
byte_block = file.read
byte_block.each_byte do |byte|
@pixels << byte
end
end
end
据我了解,每个像素包含代表 R、G 和 B 值的 3 个字节。我最初尝试将输出数组 @pixels 分组为 3 个元素的子组,假设每个像素的像素顺序和 RGB 值都保留在我的输出中。例如:
@pixels = @pixels.each_slice(3).to_a
我创建的数组长度与原始图像中的总像素数几乎相同,因此我受到鼓舞。但是,我使用 ChunkyPNG 将我的 RGB 像素阵列打印回图像,它看起来像随机颜色噪声。输入的某些字节可以@pixels
代表元数据吗?或者,输出的字节可能不会被排序为 R,G,然后是单个图片的 B 值,而是可能是所有 R 字节,然后是所有 G 字节,然后是所有 B 字节?
我想弄清楚如何将字节数组转换为以某种逻辑顺序对图像的 RGB 值进行分组的数组数组(从左上角开始向右移动,或者从左上角开始向下移动等)