Canon EDSDK MemoryStream-Bild

Ich gekämpft habe mit der Canon EDSDK für eine Weile jetzt. Ich kann erfolgreich die Bibliothek zum speichern einer Datei direkt auf der Festplatte, aber ich kann nicht get ein halten des Bildes byte[] in Erinnerung. Immer wenn ich Versuch zu Marshallen.Copy() die EDSDK-Stream byte [] ich bekomme immer die folgende Fehlermeldung:

AccessViolationException: Versucht, Lesen oder schreiben von geschütztem Speicher. Dies ist Häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

Unten ist eine der Variationen der code, den ich verwendet habe, um zu versuchen, den stream:

        private uint downloadImage(IntPtr directoryItem)
        {
            uint err = EDSDK.EDS_ERR_OK;
            IntPtr stream = IntPtr.Zero;

            //Get information of the directory item.
            EDSDK.EdsDirectoryItemInfo dirItemInfo;
            err = EDSDK.EdsGetDirectoryItemInfo(directoryItem, out dirItemInfo);

            //Create a file stream for receiving image.
            if (err == EDSDK.EDS_ERR_OK)
            {
                err = EDSDK.EdsCreateMemoryStream(dirItemInfo.Size, out stream);
            }

            // Fill the stream with the resulting image
            if (err == EDSDK.EDS_ERR_OK)
            {
                err = EDSDK.EdsDownload(directoryItem, dirItemInfo.Size, stream);
            }

            // Copy the stream to a byte[] and 
            if (err == EDSDK.EDS_ERR_OK)
            {
                byte[] buffer = new byte[dirItemInfo.Size];

                GCHandle gcHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
                //The following line is where it blows up...
                Marshal.Copy(stream, buffer, 0, (int)dirItemInfo.Size);

                //... Image manipulation, show user, whatever
            }

            return err;
        }

Haltepunkte zeigen (Durch die EdsDirectoryItemInfo Objekt), das Bild ist ja da, ich weiß nur nicht, warum ich würde immer die Ausnahme, die bin ich. Ich habe schon liebäugelt mit der Idee, die Niederlage zu akzeptieren und Lesen Sie die resultierende image von der Festplatte, dass es so leicht schreibt über die CreateFileStream Methode, aber ich sollte mich wirklich nur zum Bearbeiten des Bildes im Speicher.

Irgendwelche Ideen?

UPDATE: ich sehe dieses Verhalten in beiden Versionen 2.5 und 2.6.

  • Würden Sie bitte buchen Sie Ihren code (irgendwo) zum herunterladen das Bild, das Sie nahm einfach auf die Festplatte? Ich kann gar nicht so weit kommen. Speziell, ich kann es nicht rufen Sie mein Objekt event-handler-Funktion.
Schreibe einen Kommentar