首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 视频文件抓图失真 [已结贴,结贴人:WUNEN]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-13 16:02:01 楼主
    wmv的视频文件,抓当前播放点的图片出现失真,主要是图像比较亮的地方出现红\兰色块

    Dim vx    As Long, vy      As Long
      '暂停一下
      m_objMediaControl.Pause
      vy = m_objBasicVideo.SourceHeight  '视频高度
      vx = m_objBasicVideo.SourceWidth    '视频宽度
     
      Picture2.Height = vy  'Picture2用来放当前点的图像,高、宽等于视频
      Picture2.Width = vx
     
     

               
              '得到图象数据
              '先是40个字节的DIB头
              '然后就是长*宽*4字节的数据
      Dim sz    As Long
      Dim img()    As Long
      sz = vx * vy + 40
      ReDim img(sz - 1)
     
      m_objBasicVideo.GetCurrentImage sz * 4, img(0)
               
          '如果是图片格式未知
      If (img(0) <> 40) Or (img(3) <> &H200001) Then
            MsgBox "未知的格式!"
            Exit Sub
      End If
                      '取得图象数据
      Dim x    As Long, y      As Long
      Dim col    As Long, rr      As Long, gg      As Long, bb      As Long
      Dim pp    As Long
      pp = 10
                      '数据的格式是从下到上,从左到右的方式
      For y = 0 To vy - 1
        For x = 0 To vx - 1
          col = img(pp)

          bb = col And 255&
          gg = (col \ 256&) And 255&
          rr = (col \ 65536) And 255&
          col = RGB(rr, gg, bb)
                                      '输出到图片框中去
          Me.Picture2.PSet (x, vy - y), col
          pp = pp + 1
        Next
      Next

     
      Picture2.CurrentX = 0
      Picture2.CurrentY = vy + 2

       
       
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-13 16:24:121楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-13 16:28:542楼 得分:0
    对象定义如下

    Dim WithEvents Encoder As WMEncoder
     
      Private m_objBasicAudio  As IBasicAudio        'Basic Audio Object
    Private m_objBasicVideo As IBasicVideo          'Basic Video Object
    Private m_objMediaEvent As IMediaEvent        'MediaEvent Object
    Private m_objVideoWindow As IVideoWindow  'VideoWindow Object
    Private m_objMediaControl As IMediaControl    'MediaControl Object
    Private m_objMediaPosition As IMediaPosition 'MediaPosition Object
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-13 18:18:143楼 得分:0
    看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-13 18:23:484楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-14 13:29:415楼 得分:0
    为什么不用API抓图呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-14 17:03:386楼 得分:0
    楼上的老兄你有API的源码吗?我很急的,以前没做过,如果你有的话给我一份好吗?为了这个事我头痛了很久了,先谢了,我邮箱wuhd@spacen.net
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tzwsoho
    • 等级:
    发表于:2008-03-15 11:42:007楼 得分:5
    引用 5 楼 chenjl1031 的回复:
    为什么不用API抓图呢?


    视频可以用API抓图?!我也想知道代码~~~可以发出来大家共享一下么?谢谢~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-15 14:33:528楼 得分:95
    这个很简单便能解决, 就用一般抓屏的代码即可, 如果你是win2000可保存为.jpg 占用空间小,速度快.

    如果你真的很急的话, 上我的QQ 138449666 我免费教你

    Option Explicit
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Sub Form_Load()
      Command1.Caption = "抓取窗体"
      Picture1.Move Screen.Width
      Picture1.AutoRedraw = True
      Picture1.BorderStyle = 0
      Me.AutoRedraw = False
      Clipboard.Clear
    End Sub

    Private Sub Command1_Click()
      Command1.Move Screen.Width
      Me.Refresh
      Picture1.Picture = LoadPicture()
      Picture1.Width = Me.Width
      Picture1.Height = Me.Height
      Call keybd_event(vbKeySnapshot, 1, 0, 0)
      DoEvents
      Picture1.Picture = Clipboard.GetData(vbCFBitmap)
      SavePicture Picture1.Image, "c:\kkk.bmp"
      Command1.Move 0
    End Sub

    效果图:

    http://p.blog.csdn.net/images/p_blog_csdn_net/cbm666/366646/o_SaveVideo.jpg

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-25 10:07:359楼 得分:0
    楼上的,您那个抓屏是可以,但抓窗体内容是不行了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved