Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152

    [vb6] salvare screen di una picturebox con video

    Come da titolo uso una picturebox per vedere un film, ora ho la necessita di salvare l'immagine(frame attuale) che c'è nella picturebox, usando il classico savepicture la cosa non funziona, cioè salva l'immagine ma non vi è alcun screen reale del video ma solo il backcolor della picture

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Ovviemente la domanda è come posso salvare l'immagine ottenendo il frame reale

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    perchè il video viene "sovraimpresso" dalla scheda video.. in realtà non c'è nella picturebox..

    cosa usi per vedere il video?

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: [vb6] salvare screen di una picturebox con video

    Originariamente inviato da gprox
    Come da titolo uso una picturebox per vedere un film, ora ho la necessita di salvare l'immagine(frame attuale) che c'è nella picturebox, usando il classico savepicture la cosa non funziona, cioè salva l'immagine ma non vi è alcun screen reale del video ma solo il backcolor della picture
    Devi catturare l'immagine del sorgente 'reale' che non è il PictureBox.
    Ecco le indicazioni in generale estratte da un mio progetto e 'arrangiate' per l'esempio:

    - in un modulo BAS aggiungi:
    codice:
    Public Type POINTAPI
      X As Long
      Y As Long
    End Type
    Public Type RECT
      Left As Long
      Top As Long
      Right As Long
      Bottom As Long
    End Type
    
    Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Public Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Public Const SRCCOPY = &HCC0020
    - Nel form principale della tua applicazione
    1. imposta KeyPreview a True
    2. aggiungi un PictureBox picTemp, imposti AutoRedraw=True

    - dichiara a livello di form:
    codice:
      Dim pt As POINTAPI , rc As RECT
      Dim hWndSrc As Long
      Dim hDCSrc As Long
    - nell'evento Form_KeyDown() inserisci questo codice
    codice:
    If KeyCode = vbKeyF12 Then
        GetCursorPos pt
        hWndSrc = WindowFromPointXY(pt.X, pt.Y)
        hDCSrc = GetDC(hWndSrc)
        GetWindowRect hWndSrc, rc
    
        With picTemp
            ' imposto dimensione del picturebox temporaneo
            .Width = (rc.Right - rc.Left) * Screen.TwipsPerPixelX
            .Height = (rc.Bottom - rc.Top) * Screen.TwipsPerPixelY
        
            BitBlt .hdc, 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top, hDCSrc, 0, 0, SRCCOPY
            .Picture = .Image
            sFile = App.path & "\ScreenShot.bmp"
            SavePicture .Picture, sFile 
        End With
        ReleaseDC hDCSrc 
    End Sub
    Ora, posizionando il mouse sulla finestra del video, premi F12

    Spero di non aver dimenticato niente


  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Ok grazie uso le Dshow, be ho provato a fare come mi hai detto, solo che dava due errori uno che mancava end if che l'ho aggiunto e secondo alla riga dove c'è

    ReleaseDC hDCSrc

    ho provato a trasformarla come commento, e ho notato che salva l'immagine di tutto il form, quello che mi interessava cioè il video, non lo prende, rimane come in tutte le altre prove cioè solo un immagine nera, che se la sovrapponi alla picturebox dove si vede il video ti riprende l'animazione.

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da gprox
    Ok grazie uso le Dshow,
    ?

    Originariamente inviato da gprox
    be ho provato a fare come mi hai detto, solo che dava due errori uno che mancava end if che l'ho aggiunto e secondo alla riga dove c'è

    ReleaseDC hDCSrc
    Manca la dichiarazione. Aggiungila.

    Originariamente inviato da gprox
    ho provato a trasformarla come commento,
    Sbagliato. Leggi la guida su GetDC() e capirai il perchè.

    Originariamente inviato da gprox
    e ho notato che salva l'immagine di tutto il form, quello che mi interessava cioè il video, non lo prende, rimane come in tutte le altre prove cioè solo un immagine nera, che se la sovrapponi alla picturebox dove si vede il video ti riprende l'animazione.
    Non so cosa dirti, quel codice nel mio progetto funziona alla grande, ho catturato filmati interi in streaming sul browser da internet.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    Non so cosa dirti, quel codice nel mio progetto funziona alla grande, ho catturato filmati interi in streaming sul browser da internet.
    penso dipenderà da GetDC

    Citazione: Originariamente inviato da gprox be ho provato a fare come mi hai detto, solo che dava due errori uno che mancava end if che l'ho aggiunto e secondo alla riga dove c'è ReleaseDC hDCSrc Manca la dichiarazione. Aggiungila.
    Nulla in contrario se sapessi qual'è xD, ti chiedo troppo se mi posti come si dichiara grazie, per la guida vado subito nel sito della microsoft e controllo, grazie gibra come sempre

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da gprox
    penso dipenderà da GetDC
    Non conoscendo niente del tuo progetto (io non ho usato DShow nel mio) è difficile dirti da cosa sia causato. Ma scommetto

    Originariamente inviato da gprox
    Nulla in contrario se sapessi qual'è xD, ti chiedo troppo se mi posti come si dichiara grazie, per la guida vado subito nel sito della microsoft e controllo, grazie gibra come sempre
    Non hai l'API Viewer 2004 ? VVoVe:
    Allora scaricatelo, che ti conviene sempre: è un add-in che non può mancare tra gli strumenti di un programmatore VB6.

    - vai sul mio vecchio sito www.vbcorner.net
    - dal menu scegli TRADUZIONI
    - dal sotto menu API Viewer 2004

    E, se vuoi, ti raccomando anche
    - API Guide 3.7
    - MZTools 3.0

    Sempre che tu non li abbia già.


  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    OK gibra grazie di tutto , cosa farei in questo forum senza di te

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.