2017-03-03 2 views
0

Ich verwende die Portable Device API, um automatisch Fotos von einem verbundenen Smartphone zu erhalten. Ich habe alles richtig übertragen. Der Code, den ich verwende, ist, dass Standard-Downloadfile() Routine:C#: WPD - Herunterladen eines Bildes mit Meta-Tags

public PortableDownloadInfo DownloadFile(PortableDeviceFile file, string saveToPath) 
    { 
     IPortableDeviceContent content; 
     _device.Content(out content); 
     IPortableDeviceResources resources; 
     content.Transfer(out resources); 
     PortableDeviceApiLib.IStream wpdStream; 
     uint optimalTransferSize = 0; 
     var property = new _tagpropertykey 
     { 
      fmtid = new Guid(0xE81E79BE, 0x34F0, 0x41BF, 0xB5, 0x3F, 0xF1, 0xA0, 0x6A, 0xE8, 0x78, 0x42), 
      pid = 0 
     }; 
     resources.GetStream(file.Id, ref property, 0, ref optimalTransferSize, out wpdStream); 

     System.Runtime.InteropServices.ComTypes.IStream sourceStream = 
      // ReSharper disable once SuspiciousTypeConversion.Global 
      (System.Runtime.InteropServices.ComTypes.IStream)wpdStream; 

     var filename = Path.GetFileName(file.Name); 
     if (string.IsNullOrEmpty(filename)) 
      return null; 

     FileStream targetStream = new FileStream(Path.Combine(saveToPath, filename), 
      FileMode.Create, FileAccess.Write); 

     try 
     { 
      unsafe 
      { 
       var buffer = new byte[1024]; 
       int bytesRead; 
       do 
       { 
        sourceStream.Read(buffer, 1024, new IntPtr(&bytesRead)); 
        targetStream.Write(buffer, 0, 1024); 
       } while (bytesRead > 0); 

       targetStream.Close(); 
      } 
     } 
     finally 
     { 
      Marshal.ReleaseComObject(sourceStream); 
      Marshal.ReleaseComObject(wpdStream); 
     } 
     return pdi; 
    } 
} 

Es gibt zwei Probleme mit diesem Standard-Code: 1) - wenn die Bilder speichert sie auf dem Windows-Rechner, gibt es keine EXIF-Informationen. Diese Information ist was ich brauche. Wie konserviere ich es? 2) die gespeicherten Dateien sind sehr aufgebläht. Zum Beispiel ist die Quelle jpeg 1.045.807 Bytes, während die heruntergeladene Datei 3.942.840 Bytes ist !. Es ist ähnlich wie alle anderen Dateien. Ich hätte gedacht, dass einige innerhalb der unsicheren {} -Abschnitt Byte für Byte ausgeben würde? Gibt es eine bessere Möglichkeit, die Daten zu übertragen? (ein sicherer Weg?)

Antwort

0

Entschuldigung. es funktioniert gut .. es ist etwas anderes, das diese Probleme verursacht

+0

Können Sie Ihre Frage nicht schließen? –

Verwandte Themen