проблема с загрузкой изображения с камеры canon на компьютер

Я подключил камеру eos canon к компьютеру. У меня есть приложение, с помощью которого я могу удаленно делать снимки и загружать изображения на компьютер,

но когда я извлекаю SD-карту из камеры, я не могу загрузить изображение из буфера на компьютер

// регистрируем 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;
        }

кто-нибудь мог мне помочь, почему это событие не вызывает,

или как я загружаю изображение из буфера на компьютер без SD-карты на моей камере

Благодарность


person ulduz114    schedule 26.09.2010    source источник


Ответы (3)


Вы, вероятно, столкнулись с той же проблемой, что и я вчера: камера пытается сохранить изображение для последующей загрузки, не находит карту памяти для его сохранения и мгновенно сбрасывает изображение.

Чтобы ваш обратный вызов сработал, вам необходимо настроить камеру на сохранение изображений на ПК (kEdsSaveTo_Host) в какой-то момент во время процедуры инициализации камеры. В C ++ это работало так:

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

Для этого вам, вероятно, потребуется создать IntPtr. По крайней мере, так поступил Дмитрий Прозоровский (по подсказке некоего акадунно) в эта ветка.

person Christian Severin    schedule 19.07.2011

SDK (насколько мне известно) предоставляет только событие фотосъемки в виде объекта, создаваемого в файловой системе камеры (т. Е. На SD-карте). Я не знаю знакомого мне способа захвата из буфера. В некотором смысле это имеет смысл, потому что в среде, где есть только небольшой объем встроенной памяти, важно сохранять энергозависимую память чистой, чтобы она могла продолжать делать фотографии. Как только буфер будет сброшен в энергонезависимую память, вы сможете взаимодействовать с этими байтами. Ограничение, я знаю, но это то, что есть.

person Wayne Hartman    schedule 26.09.2010
comment
есть программное обеспечение DSLR Remote Pro, это программное обеспечение делает снимки и сохраняет изображение на ПК даже без карты памяти (SD Card), эта программа также использует edsdk - person ulduz114; 27.09.2010

Вопрос касается C #, но в Java нужно будет установитьProperty как:

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);

И обычная загрузка подойдет

person Jatin    schedule 16.04.2013