0
휴대용 스마트 폰에서 자동으로 사진을 가져 오기 위해 휴대용 장치 API를 실행하고 있습니다. 나는 그것을 모두 올바르게 옮겨야한다. 내가 사용하는 코드는 표준 DownloadFile() 루틴 :C# : WPD - 메타 태그가있는 사진 다운로드
이이 표준 코드에 문제가 있습니다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;
}
}
: 1) - 이미지가 윈도우 머신에 저장하는 경우에는 EXIF 정보가 없음가. 이 정보는 내가 필요로하는 것입니다. 어떻게 보존합니까? 2) 저장된 파일이 너무 많아졌습니다. 예를 들어 소스 jpeg는 1,045,807 바이트이고 다운로드 한 파일은 3,942,840 바이트입니다. 다른 모든 파일과 유사합니다. unsafe {} 섹션 안의 일부가 바이트로 출력 할 것이라고 생각합니까? 데이터를 전송하는 더 좋은 방법이 있습니까? (안전한 방법입니까?)
질문을 닫을 수 없습니까? –