Take the 2-minute tour ×

I am trying to do 1 of two things, preference number 1:

Turn on the Live View using VB.NET and the Canon EDSDK 2.5.2 and render the live output in a Windows Forms application. Currently I am trying to put it to a picture box; however, I am open to suggestions for sure.

The second option would be to at least turn on the Live View and have it stream via the Video output on the camera to a monitor.

I really want to accomplish the first though! Below is my current codebase, 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)'


        Dim str As String = Hex(err)


    End If

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

        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)



    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)

End Sub
share|improve this question
Can you describe more in detail what it is that is not working, how it is not working (detailed error messages, on which line it fails and such)? –  Fredrik Mörk May 21 '09 at 21:38
It fails on this line: err = EdsCreateImageRef(stream, outMemoryRef) with ERR_FILE_FORMAT_NOT_RECOGNIZED Any help is greatly appreciated... –  Justin Tabb May 21 '09 at 22:10

3 Answers 3

I was the one who originally posted this question. I see that there are others here who are still seeking the answer. I have posted the solution that we finally came up with over on my blog at http://www.overridepro.com/2009/06/28/canon-sdk-live-view/ .

share|improve this answer

Here's a .vb file in which I define class Camera which lets you do top level things like

Dim camera as New Camera

I think you may find it useful:


Over the years I've received multiple emails for updates to this block of code, which is on GitHub as open source:


The Camera class is in slnCamliftController / src / Camera.vb

Some of this code is embarrassingly terrible. For example, in order to get it to work for the 5D and 7D camera, I have to create a program that initializes the SDK and then crashes on purpose. Terrible! I know! This is found in Klugesaurus. It's like when you try to connect to the 5D or 7D, nothing works. There is a pit of spikes there. So we shove a peasant (The Klugesaurus) onto the spikes, killing him (it fails silently), so we can walk across the peasant's dead body to safety.

It's ugly and terrible, but: It works every time. If you don't do it, it doesn't work. I have asked Canon multiple times if they would release source code for EOS Utility, which connects to the 5D and 7D perfectly. They have solidly refused each time. My coworker jokes that they don't want to reveal that they, too, are using a Klugesaurus. Anyways, I just wanted to give you a heads up to that nasty detail.

I also have created a Python module to interface with the camera: http://github.com/superjoe30/pyedsdk

share|improve this answer
I've since made big edits to this class. If you want an updated and useful camera API, contact me. I'd have to make sure I have rights to distribute it and stuff. Otherwise just use the clipping as an example of working code. –  andrewrk Sep 1 '09 at 23:49
I have trouble too on trying the live view. Would you mind posted it somewhere @superjoe30? –  swdev Jan 7 '12 at 12:06
I updated the answer with the link. –  andrewrk Jun 13 '12 at 19:08

There are code samples here and discussions on different ways of acomplishing it.

share|improve this answer
None of the code examples seem to work. If anyone else has input.... –  Justin Tabb Jun 7 '09 at 23:24

Your Answer

