C# 将 SixLabors.ImageSharp Image<Rgba32> 转换为 byte[]

问题描述 投票:0回答:1

如何将以下 SixLabors.ImageSharp 代码转换为 byte[]

Image<Rgba32> myImage = new Image<Rgba32>();
byte[] myImageByteArray = ...

有人在另一篇文章中建议使用以下代码:

Rgba32[] finalImageByteArray = finalImage
                        .GetPixelMemoryGroup()
                        .SelectMany(group => group.ToArray())
                        .ToArray();

但是,这会产生 Rgba32[],而不是 byte[]

c# arrays byte sixlabors.imagesharp
1个回答
0
投票

试试这个:

        var img = new Image<Rgba32>(100, 100);
        var bytes = new byte[img.Height*img.Width*img.PixelType.BitsPerPixel/8];
        img.Frames.RootFrame.CopyPixelDataTo(bytes);

一些注意事项:

  • 您需要提供预先分配的数组。因此,数组的大小是根据图像大小和每个像素的大小计算的(除以 8 将位数转换为字节数)
  • 您得到一个副本,而不是指向图像对象内部缓冲区的指针。
© www.soinside.com 2019 - 2024. All rights reserved.