之前我问了一个类似的问题,我用过的答案在这种不同的情况下不起作用。
我有一个winform桌面c#app。
在计时器内(间隔100毫秒)我将位图转换为字节数组。
我每个时间段有一个10位图的流
然后将这些字节上传到服务器。
处理此问题的服务器没有问题。
在客户端,我使用async mehthods来使用[web服务]。
我正在检查在上述呼叫完成之前无法再次调用[web服务]的情况。
如果服务器没有及时响应,则“跳过”帧/图像。
这是我的客户代码:
public void Init()
{
_live.StreamerCompleted += new wsLive.StreamerCompletedEventHandler(_live_StreamerCompleted);
}
private void _live_StreamerCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
_uploaded = true;
}
private static bool _uploaded = true;
private static wsLive.Live _live = new wsLive.Live();
private static byte[] imageToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
imageIn.Dispose();
return ms.ToArray();
}
public static void AddFrame(Image<Bgr, Byte> _newFrame)
{
if (_newFrame != null && _uploaded)
{
byte[] _data = GetDeflated(_newFrame.Copy());
_live.StreamerAsync(Shared.Alias, _data, Guid.NewGuid().ToString());
_newFrame.Dispose();
}
}
public static void AddFrame(Bitmap _newFrame)
{
byte[] _data = imageToByteArray(_newFrame);
_live.StreamerAsync(Shared.Alias, _data, Guid.NewGuid().ToString());
_newFrame.Dispose();
}
//declared at form load
Init();
//inside my timer...
if (Uploaded)
{
LiveStreaming.AddFrame((Bitmap)_currentFrame.Clone());
}
_currentFrame.dispose();
但记忆力攀升。我这样做了吗?
感谢
答案 0 :(得分:2)
跳出来的一个问题是你没有在imageToByteArray中处理MemoryStream。
试试这个:
private static byte[] imageToByteArray(Image imageIn)
{
using (MemoryStream ms = new MemoryStream())
{
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
imageIn.Dispose();
return ms.ToArray();
}
}