游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2293|回复: 6

用VB.Net实现屏幕捕捉(类)

[复制链接]

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
发表于 2006-12-26 10:43:00 | 显示全部楼层 |阅读模式
我想对某些朋友可能有用。
.Net Framework并不万能,还是得用上API。

Public Class ScrCap

Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As Int32) As Int32
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDC As Integer, ByVal xSrc As Integer, ByVal ySrc As Integer, ByVal dwRop As Integer) As Integer

    '将指定屏幕区域内容保存到Bitmap对象
Public Function CaptureScreenToBitmap(ByVal Left As Int32, ByVal Top As Int32, ByVal Width As Int32, ByVal Height As Int32) As Bitmap
        Dim DisplayDC As New IntPtr(CreateDC("DISPLAY", Nothing, Nothing, 0))
        Dim G1 As Graphics = Graphics.FromHdc(DisplayDC)
        Dim Bmp As New Bitmap(Width, Height, G1)
        Dim G2 As Graphics = Graphics.FromImage(Bmp)
        Dim BmpDC As IntPtr = G2.GetHdc()
        BitBlt(BmpDC.ToInt32, 0, 0, Width, Height, DisplayDC.ToInt32, Left, Top, &HCC0020)
        G2.ReleaseHdc(BmpDC)
        DisplayDC = Nothing
        Return Bmp
End Function

End Class

12

主题

525

帖子

525

积分

高级会员

Rank: 4

积分
525
发表于 2006-12-26 12:33:00 | 显示全部楼层

Re:用VB.Net实现屏幕捕捉(类)

year

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2006-12-26 12:57:00 | 显示全部楼层

Re:用VB.Net实现屏幕捕捉(类)

cool

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-12-26 18:16:00 | 显示全部楼层

Re:用VB.Net实现屏幕捕捉(类)

API is the base.

1

主题

102

帖子

108

积分

注册会员

Rank: 2

积分
108
QQ
发表于 2006-12-26 19:29:00 | 显示全部楼层

Re:用VB.Net实现屏幕捕捉(类)

yeah, I won't use GetDIBits any longer,(it is slow processing pixcel by pixcel  , yours is fast)


BTW: why not make method CaptureScreenToBitmap a shared member , it would be better.

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
 楼主| 发表于 2006-12-28 08:59:00 | 显示全部楼层

Re:用VB.Net实现屏幕捕捉(类)

make method CaptureScreenToBitmap a shared member?
你的意思是写成
Public Shared CaptureScreenToBitmap
是为了不生成类实例也能调用吧?

1

主题

102

帖子

108

积分

注册会员

Rank: 2

积分
108
QQ
发表于 2006-12-28 13:25:00 | 显示全部楼层

Re:用VB.Net实现屏幕捕捉(类)

yes,
以前遇到过类似情况,vs带的代码分析就建议我改成共享成员,说那样性能更高……
(估计是少占内存)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 04:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表