Monotouch Copy item from album(從相簿拷貝檔案出來)
阿新 • • 發佈:2018-12-27
專案中需要採集視訊、照片、錄音,並上傳到伺服器,這就需要讀取這些檔案流,照片和錄音都很容易搞定。
視訊有些麻煩,因為錄製的視訊被存到相簿內,之後在FinishedPickingMedia裡面不像照片可以通過下面程式碼直接得到
UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
所以想到要不就直接去讀取相簿的檔案,在模擬器內測試成功。
1: public override void FinishedPickingMedia(UIImagePickerController picker, NSDictionary info)
2: {
3: //圖片之前有方法讀取了,這裡主要是測試視訊,下面是相簿內的視訊地址,很容易用程式碼得到的
4: //主要是在模擬器中選取視訊,點選use後不能觸發這個事件,不知道是不是模擬器的bug,所以固定下面視訊地址,然後選擇圖片來執行下面程式碼
5: NSUrl referenceURL = new NSUrl("assets-library://asset/asset.mov?id=5F4A9F73-3542-469F-8DAD-BC2B53BFB40C&ext=mov");
6: if (referenceURL != null)
7:{
8: ThreadPool.QueueUserWorkItem(delegate
9: {
10: ALAssetsLibrary library = new ALAssetsLibrary();
11: library.AssetForUrl(referenceURL, (asset) =>
12: {
13: if (asset != null)
14: {
15: stringfilePath1 = Path.Combine(destPath, asset.DefaultRepresentation.Filename);
16: long size = asset.DefaultRepresentation.Size;
17: byte[] imgData = new byte[size];
18: NSError nsError;
19: IntPtr buffer = Marshal.AllocHGlobal(imgData.Length);
20: //拷貝ALAsset的一定位元組到一個緩衝中
21: asset.DefaultRepresentation.GetBytes(buffer, 0, (uint)size, out nsError);
22: 吧緩衝寫入到byte
23: Marshal.Copy(buffer, imgData, 0, imgData.Length);
24: //可以寫成檔案,或傳送位元組流等動作
25: File.WriteAllBytes(filePath1, imgData);
26: }
27:
28: }, (error) =>
29: {
30: if (error != null)
31: {
32: Console.WriteLine("錯誤: " + error.LocalizedDescription);
33: }
34: });
35: });
36: }
37: picker.DismissModalViewControllerAnimated(true);
38: }
作者:Bruce Lee
出處:http://www.cnblogs.com/BruceLee521
本博原創文章版權歸部落格園和本人共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出作者名稱和原文連線,否則保留追究法律責任的權利。