Visualizzazione dal vivo con Canon EDSDK 2.5.2 VB.NET
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.