Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Параметры GetDiBits Добавлено: 14.02.07 20:32  

Автор вопроса:  Sofist | ICQ: 291657044 
Здравствуйте!! есть такой вот код:
Option Explicit
Private Const BI_RGB = 0&

Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap _
As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI _
As BITMAPINFO, ByVal wUsage As Long) As Long

Private Declare Function SetDIBitsToDevice Lib "gdi32" (ByVal hdc As Long, ByVal _
x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As _
Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As _
Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
Private Type BITMAPINFOHEADER '40 bytes
        biSize As Long
        biWidth As Long
        biHeight As Long
        biPlanes As Integer
        biBitCount As Integer
        biCompression As Long
        biSizeImage As Long
        biXPelsPerMeter As Long
        biYPelsPerMeter As Long
        biClrUsed As Long
        biClrImportant As Long
End Type

Dim f As BITMAPINFO 'структура битмап_инфо хранит _
информацию о копируемом рисунке, 40 байтов
Dim Contain() As Byte 'массив для битов рисунка

Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type
Private Type BITMAPINFO
        bmiHeader As BITMAPINFOHEADER
        bmiColors As RGBQUAD
End Type

Private Const DIB_RGB_COLORS = 0

Private Sub Command1_Click()
    With f.bmiHeader
        .biSize = LenB(f)
        .biWidth = ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)
        .biHeight = ScaleY(Picture1.Picture.Width, vbHimetric, vbPixels)
        .biPlanes = 1
        .biBitCount = 32
        .biCompression = 0
        .biBitCount = 24
        .biCompression = BI_RGB
    End With
    
    ReDim Contain(1 To 3, 1 To f.bmiHeader.biWidth, 1 To f.bmiHeader.biHeight) As Byte

    Command1.Caption = GetDIBits(hdc, Picture1.Picture, 0, f.bmiHeader.biHeight, Contain(1, 1, 1), f, 0)
    
    SetDIBitsToDevice hdc, 0, 0, f.bmiHeader.biWidth, f.bmiHeader.biHeight, 0, 0, 0, _
    f.bmiHeader.biHeight, Contain(1, 1, 1), f, DIB_RGB_COLORS
    
End Sub

Этот код посредством функции GetDIBits копирует картинку из Picture1 на форму. Вопрос состоит в следующем: Допустим имеем видео файл, который проигрывается в Picture1 с помощью MMControl. Потом нажимается пауза и дается команда на отработку вышеизложенного алгоритма. В результате массив Contain() получается забит нулями.. Я так понимаю функции GetDIBits передается hdc именно Picture1.Picture, а как передать ей hdc видео файла??

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 15.02.07 00:31
ну есть там GetWindowDC, WindowFromPoint всякие... GetParent ... вопрос в другойм, есть ли вообще hdc у "видео файла"

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 15.02.07 00:32
А блин, FindWindow забыл, самое главное )) мож пригодится...

короче гугл

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам