首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

关于截屏代码优化的请问

2012-02-24 
关于截屏代码优化的请教以下有两段我的截屏代码,请教以下代码还能再做那些的优化使得截屏速度更快.我知道

关于截屏代码优化的请教
以下有两段我的截屏代码,请教以下代码还能再做那些的优化使得截屏速度更快.
我知道我的测试结果是跟电脑的配置有关的,但我还是希望能在我这配置不怎么高的电脑里能够取得更快的执行速度.

代码一:
  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毫秒左右.


请问以上二段代码还能否再提高截屏速度?????

[解决办法]

热点排行