problem with download picture from canon camera to pc

自古美人都是妖i 提交于 2019-12-11 05:01:46

问题


i connected a eos canon camera to pc
i have an application that i could take picture remotly ,and download image to pc,

but when i remove the SD card from camera , i cant download image from buffer to pc

// register objceteventcallback

err = EDSDK.EdsSetObjectEventHandler(obj.camdevice, EDSDK.ObjectEvent_All, objectEventHandler, new IntPtr(0));
              if (err != EDSDK.EDS_ERR_OK)
                 Debug.WriteLine("Error registering object event handler");

///

public uint objectEventHandler(uint inEvent, IntPtr inRef, IntPtr inContext)
        {
            switch(inEvent)
            {

                case EDSDK.ObjectEvent_DirItemCreated:

                    this.getCapturedItem(inRef);

                    Debug.WriteLine("dir item created");

                    break;
                case EDSDK.ObjectEvent_DirItemRequestTransfer:
                    this.getCapturedItem(inRef);
                    Debug.WriteLine("file transfer request event");
                    break;

                default:
                    Debug.WriteLine(String.Format("ObjectEventHandler: event {0}", inEvent));
                    break;
            }
            return 0;
        }

anyone could help me , why this event does not call ,

or how i download image from buffer to pc, with out have Sd card on my camera

thanks


回答1:


You probably ran into the same problem as I did yesterday: the camera tries to store the image for a later download, finds no memory card to store it to and instantly discards the image.

To get your callback to fire, you need to set the camera to save images to the PC (kEdsSaveTo_Host) at some point during your camera initialization routine. In C++, it worked like this:

    EdsInt32 saveTarget = kEdsSaveTo_Host;
    err = EdsSetPropertyData( _camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );

You probably need to build an IntPtr for this. At least, that's what Dmitriy Prozorovskiy did (prompted by a certain akadunno) in this thread.




回答2:


The SDK (as far as I know) only exposes the picture taking event in the form of the object being created on the file system of the camera (ie the SD card). There is not a way of which I am familiar to capture from buffer. In a way this makes sense, because in an environment where there is only a small amount of onboard memory, it is important to keep the volatile memory clear so that it can continue to take photographs. Once the buffer has been flushed to nonvolatile memory, you are then clear to interact with those bytes. Limiting, I know, but it is what it is.




回答3:


The question asks for C#, but in Java one will have to setProperty as:

NativeLongByReference number = new NativeLongByReference( new NativeLong( EdSdkLibrary.EdsSaveTo.kEdsSaveTo_Host ) );
    EdsVoid data = new EdsVoid( number.getPointer() ); 
    NativeLong l = EDSDK.EdsSetPropertyData(edsCamera, new NativeLong(EdSdkLibrary.kEdsPropID_SaveTo), new NativeLong(0), new NativeLong(NativeLong.SIZE), data);

And the usual download will do



来源:https://stackoverflow.com/questions/3796658/problem-with-download-picture-from-canon-camera-to-pc

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!