gpt4 book ai didi

c# - 如何在 C# 中对字节数组执行 RLE(运行长度编码)?

转载 作者:行者123 更新时间:2023-11-30 14:04:29 25 4
gpt4 key购买 nike

我正在尝试对两个位图文件(它们的字节数组)进行异或以生成一个字节数组,该字节数组可用于将图像 A 更改为图像 B,反之亦然。我正在通过网络发送此文件,因此我想在此之前进行一些基本压缩。

有没有办法在 C# 中(使用内置的或快速可靠的第 3 方库)对字节数组执行 RLE(运行长度编码)以达到此目的?

注意事项:

  • 如果您要提出我的方法的替代方案,请记住远程计算机上的解压缩和转换必须尽可能快速和高效。

最佳答案

我通常使用 GZipStream。它足够快并且工作正常。

class Compressor
{
public static byte[] compress(byte[] buffer)
{
MemoryStream ms = new MemoryStream();
GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true);
zip.Write(buffer, 0, buffer.Length);
zip.Close();
ms.Position = 0;

byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);

byte[] gzBuffer = new byte[compressed.Length + 4];
Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return gzBuffer;
}
public static byte[] decompress(byte[] gzBuffer)
{
MemoryStream ms = new MemoryStream();
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);

byte[] buffer = new byte[msgLength];

ms.Position = 0;
GZipStream zip = new GZipStream(ms, CompressionMode.Decompress);
zip.Read(buffer, 0, buffer.Length);

return buffer;
}
}

关于c# - 如何在 C# 中对字节数组执行 RLE(运行长度编码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com