Vb.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

我创建了一个Visual Basic.NET应用程序,它每秒拍摄一个屏幕截图并将其保存到文件
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格式。@Jimi
PNG
格式占用的空间是
jpg