Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Canon SDK for Java
branch: master
Failed to load latest commit information.
.externalToolBuilders Newline corrections and converted to UTF-8 so ant would build properly
lib code cleanup / fixes / formatting / refactoring
.classpath Fix a reference and add some retry code to SetPropertyCommand from pr…
.gitignore Fix a reference and add some retry code to SetPropertyCommand from pr…
.project oops
arch.png Small changes, add missing files from master, fix warnings
build.xml merged ananta's changes, updated docs, added new example


This is a Java wrapper around the EDSDK that gives you full access to your Canon SLR camera via the EDSDK on Windows*. The features include:

  • Taking and downloading pictures
  • Manually adjusting focus
  • Setting apperature, exposure, ISO
  • Accessing live view

(*) With a few changes it could also work on Mac OSX.

Applying for SDK access

Before you can use this library you need to obtain the EDSDK native library from Canon. You can do so via their developers program:

Once you were granted access - this may take a few days - download the latest version of their library and follow the usage instructions.


edsdk4j architecture overview

Using the EDSDK from Java directly is possible using the edsdk.native package, but because of threading difficulties and the involved data types this can be a bit painful. In the edsdk.utils package you find a small layer built on top of the EDSDK that gives you more Java-like examples.

Most notably, all calls have synchroneous and async calls. The async variants give you a CanonTask and you can choose if you want to wait for the result or be notified when it's done.

CanonCamera slr = new CanonCamera(); 

// Use the blocking variant to get a result immediately. 
File file = slr.shoot()[0]; 
System.out.println( "File: " + file.getAbsolutePath() );

// Use async handlers to continue your code immediately 
slr.shootAsync().whenDone( f -> System.out.println( f ) ); 

// close session is always blocking.
// because commands are queued this won't be executed 
// until the above slr.shoot() finished it's work. 

Getting started

    CanonCamera slr = new CanonCamera(); 
    File file = slr.shoot()[0]; // (*)

    (*) If you have raw+jpeg enabled you'll have two 
    images in that array. Usually it's just one. 

For more look at the examples in src/gettingstarted.


To regenerate the JNA wrapper classes:

set EDSDK_HOME=path-to-edsdk
ant generate-wrapper


  • Currently JNAerator is not detecting __stdcall correctly so the Callbacks defined in EdSdkLibrary need to be manually modified to extend StdCallCallback. Technically EdSdkLibrary itself should also extend StdCallLibrary but it's possible to workaround this using options passed into the Native.loadLibrary() method (see CanonCamera class for this workaround).
Something went wrong with that request. Please try again.