J'ai essayé de récupérer des images prises sur l'appareil photo depuis très longtemps maintenant. Je suis capable de prendre des photos avec le SDK en utilisant:Récupération d'images de l'appareil photo Canon à l'aide d'EDSDK 2.9
err = EDSDK.EdsSendCommand (cameraDev, EDSDK.CameraCommand_TakePicture, 0);
Je le fais après avoir ouvert une session de caméra valide. J'ai aussi ajouté un
objectEventHandler et un stateEventHandler pour les événements qui ressemblent à:
public static uint stateEventHandler(uint inEvent, uint inParameter, IntPtr inContext)
{
switch (inEvent)
{
case EDSDK.StateEvent_JobStatusChanged:
Debug.WriteLine(String.Format("There are objects waiting to be transferred. Job status {0}", inParameter));
break;
case EDSDK.StateEvent_ShutDownTimerUpdate:
if (inParameter != 0)
Debug.WriteLine(String.Format("shutdown timer update: {0}", inParameter));
break;
default:
Debug.WriteLine(String.Format("StateEventHandler: event {0}, parameter {1}", inEvent, inParameter));
break;
}
return 0;
}
public static uint objectEventHandler(uint inEvent, IntPtr inRef, IntPtr inContext)
{
switch (inEvent)
{
case EDSDK.ObjectEvent_VolumeInfoChanged:
Debug.WriteLine("volume info changed");
#region retrieve volume info
EDSDK.EdsVolumeInfo volumeInfo;
err = EDSDK.EdsGetVolumeInfo(inRef, out volumeInfo);
if (err == EDSDK.EDS_ERR_OK)
{
switch (volumeInfo.StorageType)
{
case (uint)EDSDK.EdsStorageType.Non:
Debug.WriteLine("No card inserted");
break;
default:
case (uint)EDSDK.EdsStorageType.CF:
case (uint)EDSDK.EdsStorageType.SD:
if (volumeInfo.Access == (uint)EDSDK.EdsAccess.ReadWrite)
{
Debug.WriteLine(String.Format("Label: {0}, Max Capacity: {1}, Free Space: {2}",
volumeInfo.szVolumeLabel, volumeInfo.MaxCapacity, volumeInfo.FreeSpaceInBytes));
/*
err = EDSDK.EdsGetChildAtIndex(volumeInfo, 0, directoryList);
if (err != EDSDK.EDS_ERR_OK)
throw new Exception(String.Format("EdsGetChildAtIndex: " + err.ToString()));
*/
}
else
Debug.WriteLine(String.Format("Volume access rights: {0}", volumeInfo.Access));
break;
}
}
#endregion retrieve volume info
break;
case EDSDK.ObjectEvent_DirItemCreated:
downloadImage(inContext);
Debug.WriteLine("dir item created");
break;
default:
Debug.WriteLine(String.Format("ObjectEventHandler: event {0}", inEvent));
break;
}
return 0;
}
J'ai essayé plusieurs approches (pour récupérer cette image) aucun d'entre eux ne semble fonctionner . Certaines approches sont:
http://tech.groups.yahoo.com/group/CanonSDK/message/1575
[http://stackoverflow.com/questions/3762530/take-picture-and-directly-save-image-to-pc-using-edsdk-2 -8]
[http://canonsdk.com/phpBB3/viewtopic.php?f=7 & t = 94 & sid = 7fcbe7ad6eadb399dbcb4b61a7333112]
la chose est tous ne sont qu'une partie du code , quand j'essaie de le mettre dans le mien, ça ne fonctionne jamais correctement. Probablement parce que je ne suis pas experte t sur memoryStreams, pointeurs un tel. La plupart des erreurs que je reçois sont lors de la lecture des flux et de les copier dans un tampon local, il dit que le flux est vide.
Est-ce que quelqu'un a un code d'échantillon complet pour prendre une photo et la télécharger sur le disque (ou la mémoire), ou l'approche correcte dont j'ai besoin pour compléter cela?
Merci Fernando
seriez-vous prêt à passer en C++? – rossb83