这是VB.NET的代码,本该发到VB.NET区的,但觉得现在用C#的人比较多,所以发在这应该会更有人气些.以下有两段我的截屏代码,请教以下代码还能再做那些的优化使得截屏速度更快.
我知道我的测试结果是跟电脑的配置有关的,但我还是希望能在我这配置不怎么高的电脑里能够取得更快的执行速度.代码一:
        Dim Tim As New Stopwatch
        Tim.Start()
        For i As Integer = 1 To 50
            Dim g As Graphics
            Dim bmp As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
            g = Graphics.FromImage(bmp)
            g.CopyFromScreen(0, 0, 0, 0, New Size(bmp.Width, bmp.Height))
            g.Dispose()
            Dim Bytes() As Byte
            Dim p As New Imaging.EncoderParameter(Imaging.Encoder.Quality, 20)
            Dim ps As New Imaging.EncoderParameters(1)
            ps.Param(0) = p
            Using BmpStream As MemoryStream = New MemoryStream
                bmp.Save(BmpStream, GetCodecInfo("image/jpeg"), ps)
                Bytes = BmpStream.ToArray
            End Using
        Next
        Tim.Stop()
        Add("截图完毕,总用时:" & Tim.ElapsedMilliseconds & " 毫秒   平均: " & Tim.ElapsedMilliseconds \ 50)
这代码50次截屏的平均值是380左右.
代码二:
        Dim Tim As New Stopwatch
        Tim.Start()
        For i As Integer = 1 To 50
            Dim hDC, hMDC As Integer
            Dim hBMP, hBMPOld As Integer
            Dim sw, sh As Integer
            hDC = GetDC(0)
            hMDC = CreateCompatibleDC(hDC)
            sw = Screen.PrimaryScreen.Bounds.Width
            sh = Screen.PrimaryScreen.Bounds.Height
            hBMP = CreateCompatibleBitmap(hDC, sw, sh)
            hBMPOld = SelectObject(hMDC, hBMP)
            BitBlt(hMDC, 0, 0, sw, sh, hDC, 0, 0, SRCCOPY)
            hBMP = SelectObject(hMDC, hBMPOld)
            Dim bmp As New Bitmap(Image.FromHbitmap(New IntPtr(hBMP)))
            Dim ps As EncoderParameters
            ps = New EncoderParameters(1)
            Dim p As EncoderParameter
            p = New EncoderParameter(Encoder.Quality, 30)
            ps.Param(0) = p
            Dim ms As New MemoryStream
            bmp.Save(ms, GetCodecInfo("image/jpeg"), ps)
            Dim Bytes() As Byte = ms.ToArray
            DeleteDC(hDC)
            DeleteDC(hMDC)
            DeleteObject(hBMP)
        Next
        Tim.Stop()
        Add("截图完毕,总用时:" & Tim.ElapsedMilliseconds & " 毫秒   平均: " & Tim.ElapsedMilliseconds \ 50)
代码二50次截屏的平均值是420毫秒左右.
请问以上二段代码还能否再提高截屏速度?????