I am trying to do one of two things, preference number 1:
Enable Live View with VB.NET and Canon EDSDK 2.5.2 and output live output in the Windows Forms application. I'm currently trying to put it in a picture window; However, I am open to suggestions for sure.
The second option would be to at least enable Live View and transfer the stream through the video output to the camera on the monitor.
I really want to accomplish the first though! Below is my current code base, help!
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
Justin tabb
source share