Domanda

Sto provando a fare 1 delle due cose, preferenza numero 1:

Attiva la visualizzazione dal vivo utilizzando VB.NET e Canon EDSDK 2.5.2 ed esegui il rendering dell'output live in un'applicazione Windows Forms.Attualmente sto cercando di inserirlo in una casella di immagine;tuttavia sono sicuramente aperto a suggerimenti.

La seconda opzione sarebbe almeno attivare la visualizzazione dal vivo e trasmetterla in streaming tramite l'uscita video della fotocamera su un monitor.

Voglio davvero realizzare il primo però!Di seguito è riportata la mia base di codice attuale, aiuto!

Private Sub btnStartLiveView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartLiveView.Click

    Dim err As Integer = EDS_ERR_OK


    Dim prop As Integer = EdsEvfOutputDevice.kEdsEvfOutputDevice_PC
    Dim proptype As Integer = EDSDKTypes.kEdsPropID_Evf_OutputDevice
    '// Stock the property.'
    Dim wkIntPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(prop))
    Marshal.StructureToPtr(prop, wkIntPtr, False)
    'send property/command to the camera'
    EdsSetPropertyData(model.getCameraObject(), proptype, 0, Marshal.SizeOf(prop), prop)

    Dim stream As IntPtr
    Dim outMemoryRef As IntPtr
    Dim evfImage As IntPtr

    err = EdsCreateMemoryStream(0, stream)

    If err = EDS_ERR_OK Then

        err = EdsCreateImageRef(stream, outMemoryRef) '(stream, evfImage)'

    Else

        Dim str As String = Hex(err)

        MessageBox.Show(str)

    End If

    If err = EDS_ERR_OK Then
        err = EdsDownloadEvfImage(model.getCameraObject(), evfImage)
    Else

        Dim str As String = Hex(err)

        MessageBox.Show("&H" & str & "L") ' Shows &H2CL which = ERR_FILE_FORMAT_NOT_RECOGNIZED'
    End If

    ' Get the Incidental Data of the Image'

    If err = EDS_ERR_OK Then

        Dim zoom As UInt32
        Dim point As IntPtr


        EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(zoom), zoom)

        EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(point), point)

    Else

        'MessageBox.Show(err.ToString())'

    End If


    Dim buffer(Marshal.SizeOf(stream)) As Byte

    Dim mStream As System.IO.Stream = New System.IO.MemoryStream(Marshal.SizeOf(stream))


    Dim gcTime As GCHandle = GCHandle.Alloc(0, GCHandleType.Pinned)
    Dim pTime As IntPtr = gcTime.AddrOfPinnedObject()
    Marshal.Copy(stream, buffer, 0, Marshal.SizeOf(stream))

    mStream.Write(buffer, 0, Marshal.SizeOf(stream))

    Me.PictureBox1.Image = Image.FromStream(mStream)

    EdsRelease(stream)
End Sub

Nessuna soluzione corretta

Altri suggerimenti

Sono stato io a postare originariamente questa domanda.Vedo che ci sono altri qui che stanno ancora cercando la risposta.Ho pubblicato la soluzione che abbiamo finalmente trovato sul mio blog all'indirizzo http://www.overridepro.com/2009/06/28/canon-sdk-live-view/ .

Ecco un file VB in cui io definisco classe Camera, che ti permette di fare cose di alto livello come

Dim camera as New Camera
camera.EstablishSession()
camera.TakePicture("C:\path\to\save.jpg")
camera.StartLiveView(me.LiveViewPictureBox)
camera.StopLiveView()
camera.FlushTransferQueue()

Credo che potrebbe risultare utile:

<snip>

Nel corso degli anni ho ricevuto diverse mail per aggiornamenti su questo blocco di codice, che è su GitHub come open source:

http://github.com/superjoe30/Camlift-Controller

La classe Camera è in slnCamliftController / src / Camera.vb

Alcune di questo codice è imbarazzante terribile. Ad esempio, al fine di farlo funzionare per la fotocamera 5D e 7D, devo creare un programma che inizializza l'SDK e poi si blocca di proposito. Terribile! Lo so! Questo si trova nel Klugesaurus. E 'come quando si tenta di connettersi alla 5D o 7D, non funziona nulla. V'è un pozzo di punte là. Così abbiamo spingere un contadino (Il Klugesaurus) sulle punte, uccidendolo (non riesce in silenzio), in modo che possiamo attraversare cadavere del contadino per la sicurezza.

E 'brutto e terribile, ma: Funziona ogni volta. Se non lo fai, non funziona. Ho chiesto più volte se Canon avrebbero rilasciare il codice sorgente per EOS Utility, che collega la 5D e 7D perfettamente. Si sono solidamente rifiutato ogni volta. Il mio collega scherza dicendo che non vogliono rivelare che anche loro, stanno utilizzando un Klugesaurus. In ogni modo, volevo solo darti un testa a testa fino a quel brutto dettagli.

Ho anche creato un modulo Python per interfacciarsi con la macchina fotografica: http://github.com/superjoe30/pyedsdk

Ci sono esempi di codice qui e discussioni sui diversi modi di acomplishing esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top