Vb.net 如何避免一半的图片时,使现场截图饲料?
我创建了一个Visual Basic.NET应用程序,它每秒拍摄一个屏幕截图并将其保存到文件Vb.net 如何避免一半的图片时,使现场截图饲料?,vb.net,screenshot,http-live-streaming,Vb.net,Screenshot,Http Live Streaming,我创建了一个Visual Basic.NET应用程序,它每秒拍摄一个屏幕截图并将其保存到文件screenshot.jpg,我还创建了一个服务器,每秒为screenshot.jpg文件提供服务。但问题是,有时我会看到一半的图片(可能是因为它还没有画完)。有办法解决这个问题吗?我想知道网络摄像头是如何提供这种流畅的视频流的。这是否意味着我的截图程序太慢了 这是我的申请 ' Take screenshot every second Private Sub Timer1_Tick(sender As
screenshot.jpg
,我还创建了一个服务器,每秒为screenshot.jpg
文件提供服务。但问题是,有时我会看到一半的图片(可能是因为它还没有画完)。有办法解决这个问题吗?我想知道网络摄像头是如何提供这种流畅的视频流的。这是否意味着我的截图程序太慢了
这是我的申请
' Take screenshot every second
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim bmp As Bitmap = ScreenCap()
bmp.Save(Application.StartupPath & "\screenshot.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
bmp.Dispose()
End Sub
您可以在Github上看到完整的项目:
这是前端代码
<html>
<body>
<img class="screenshot" src="screenshot.jpg">
<script>
setInterval(() => {
document.querySelector('.screenshot').src =
'screenshot.jpg?id=' + Math.random(0, 1000)
}, 1000)
</script>
</body>
</html>
设置间隔(()=>{
document.querySelector('.screenshot').src=
'screenshot.jpg?id='+Math.random(0,1000)
}, 1000)
如果您怀疑是因为文件完成了编写,请保存屏幕截图并嵌入当前时间的秒数,然后让服务器请求n-1文件?阅读注释。DpiAwareness部分以及虚拟屏幕大小的计算方式(您当前测量屏幕大小的方式可能非常错误)。请注意,Graphics.CopyFromScreen()
已经将当前桌面DC复制到底层DC(它从中生成的位图)。DpiAware应用程序还可以使用当前桌面DC的相同Dpi创建位图。当然,每个屏幕都可以有自己的Dpi定义。因此,您可能希望将捕获限制在当前屏幕上。WinForms应用程序可以捕获(以正常方式-包括直接调用BitBlt
,差别不大,因为如前所述,无论如何都会发生这种情况)高达每秒27-29帧(考虑到整个屏幕)。足以生成一个好的动画。通过网络传输捕获的序列是另一回事。顺便说一句,不要将图像保存为JPEG格式,请使用本机PNG格式。@JimiPNG
格式占用的空间是jpg