c# DeflateSream return 0;
c# DeflateSream return 0;
我正在尝试使用 Defltestream
压缩图像,但不知何故,当我尝试打印 return 缓冲区长度时,它始终为 0。
public void goo()
{
MemoryStream ms = new MemoryStream();
MemoryStream ms2 = new MemoryStream();
Bitmap prev;
prev = GetDesktopImage();
prev.Save(ms,ImageFormat.Png);
prev.Save(ms2, ImageFormat.Png);
com = ms.ToArray();
MessageBox.Show((com.Length / 1000).ToString() + "KB");
MessageBox.Show(((Compress(ms2).Length/1000).ToString()+"KB"));
}
GetDesktopImage
是一个 return 截图的功能。在第一个消息框中它显示长度(例如输出是:“350kb”),但在第二个消息框中它总是 0kb!
这是压缩方法:
private static byte[] Compress(Stream input)
{
using (var compressStream = new MemoryStream())
using (var compressor = new DeflateStream(compressStream, CompressionMode.Compress))
{
input.CopyTo(compressor);
compressor.Close();
return compressStream.ToArray();
}
}
有谁知道为什么我总是得到 0?
我认为它显示为零,但该值不是零。当您除以整数或整数除以数字时,结果始终是整数。当整数的值为十进制时,它会将值转换为非十进制数(舍入)。
示例:
int number = 25;`
return number / 2;
结果将是 13,因为该值是 12.5,它通过四舍五入变成了整数值,得到 13
当您将内容写入流(或在您的情况下保存)时,其内部位置会相应增加。
所以正如 Lasse V. Karlsen 所说,你应该倒回流
m.Position = 0;
或
m.Seek(0, SeekOrigin.Begin)
让读者从位置0开始阅读。
Bitmap b = new Bitmap(100, 100);
var m = new MemoryStream();
b.Save(m, ImageFormat.Png);
Console.WriteLine(m.Position); // will output 169
我正在尝试使用 Defltestream
压缩图像,但不知何故,当我尝试打印 return 缓冲区长度时,它始终为 0。
public void goo()
{
MemoryStream ms = new MemoryStream();
MemoryStream ms2 = new MemoryStream();
Bitmap prev;
prev = GetDesktopImage();
prev.Save(ms,ImageFormat.Png);
prev.Save(ms2, ImageFormat.Png);
com = ms.ToArray();
MessageBox.Show((com.Length / 1000).ToString() + "KB");
MessageBox.Show(((Compress(ms2).Length/1000).ToString()+"KB"));
}
GetDesktopImage
是一个 return 截图的功能。在第一个消息框中它显示长度(例如输出是:“350kb”),但在第二个消息框中它总是 0kb!
这是压缩方法:
private static byte[] Compress(Stream input)
{
using (var compressStream = new MemoryStream())
using (var compressor = new DeflateStream(compressStream, CompressionMode.Compress))
{
input.CopyTo(compressor);
compressor.Close();
return compressStream.ToArray();
}
}
有谁知道为什么我总是得到 0?
我认为它显示为零,但该值不是零。当您除以整数或整数除以数字时,结果始终是整数。当整数的值为十进制时,它会将值转换为非十进制数(舍入)。
示例:
int number = 25;`
return number / 2;
结果将是 13,因为该值是 12.5,它通过四舍五入变成了整数值,得到 13
当您将内容写入流(或在您的情况下保存)时,其内部位置会相应增加。
所以正如 Lasse V. Karlsen 所说,你应该倒回流
m.Position = 0;
或
m.Seek(0, SeekOrigin.Begin)
让读者从位置0开始阅读。
Bitmap b = new Bitmap(100, 100);
var m = new MemoryStream();
b.Save(m, ImageFormat.Png);
Console.WriteLine(m.Position); // will output 169