1. 程式人生 > >UWP 後臺保存圖片

UWP 後臺保存圖片

方式 creation 資源 creat logo 子類 one 不能 red

在做UWP的時候,有一個需求,就是點擊下載按鈕,需要將當前頁面中的Image控件中顯示的圖片保存下來。

既然聊到了下載圖片,索性把添加圖片也講一下。

一:給Image控件添加圖片

xaml代碼:

<Image Source="Assets/icon/logo.png"
    Name="Logo"/>

在xaml裏寫樣式特別簡單,只要在Image的Source屬性裏填上圖片的地址就好了。

c#代碼:

Logo.Source = new BitmapImage(new Uri("Assets/icon/logo.png"));

通過IDE查看定義可以看到,Image控件的Source屬性的類型是ImageSource類型,但是再查看ImageSource的定義發現是空的。

public ImageSource Source { get; set; }

而查看BitmapImage類的定義發現是繼承於ImageSource類。 ImageSource是父類而BitmapImage是子類。

說明我們在用c#代碼寫的時候,不能直接通過父類去定義。例如:

Logo.Source = new ImageSource();  //這種方式是錯誤的,會報錯

而應該用子類去寫

Logo.Source = new BitmapImage(new Uri("Assets/icon/logo.png"));

二:BitmapImage 位圖類

BitmapImage類 有一個 類型是Uri 類的參數的構造函數

public BitmapImage(Uri uriSource);

通過這個構造函數將圖片的地址賦值上去。

三:Uri類

Uri: Uniform Resource identifier 統一資源標識符

簡單來理解就是某個東西的標識,是一串字符串,用來標識的。

四:BackgroundDownloader 後臺下載器類

如果你要保存的圖片很大或者文件很大的時候,建議使用BackgroundDownloader後臺下載類。

//定義一個後臺下載器
BackgroundDownloader backgroundDownload = new BackgroundDownloader();
//創建一個下載任務對象 DownloadOperation download
= backgroundDownload.CreateDownload(uri, newFile);
//開始下載
await download.StartAsync();

其中用調用下載器的CreateDownload()方法,創建一個下載任務

public DownloadOperation CreateDownload(Uri uri, IStorageFile resultFile);

查看定義可以看到有兩個參數

第一個參數是需要下載文件的uri地址,第二個參數是IStorageFile 類型的本地文件對象

五:IStorageFile 接口

看到前面帶了個I就知道是一個存儲文件的接口。

interface 接口

六:StorageFile 存儲文件類

該類繼承了IStorageFile 接口。

七:StorageFolder 文件夾類

在系統中圖片文件夾裏創建一個文件夾

//在系統已知的文件夾中找到圖片 這個文件夾  然後在裏面創建一個名字為ONE的文件夾 
StorageFolder folder = await KnownFolders.PicturesLibrary.CreateFolderAsync("ONE", CreationCollisionOption.OpenIfExists);

第二個參數是指當你在創建文件夾時遇到已有文件夾的時候,該怎麽做。

然後可以用StorageFolder裏的CreateFileAsync() 方法創建一個StorageFile對象

StorageFile newFile = await folder.CreateFileAsync(imageName, CreationCollisionOption.OpenIfExists);

CreateFileAsync()定義

public IAsyncOperation<StorageFile> CreateFileAsync(string desiredName, CreationCollisionOption options);   //名字  創建時發生文件碰撞怎麽辦

八:總結一下思路

1.先用StorageFolder創建一個文件夾

2.再用CreateFileAsync() 創建一個文件

3.創建一個後臺下載器

4.創建一個後臺任務,參數是uri和StorageFile

public async Task SaveImage(string imageName,string imageUri)
{
  BackgroundDownloader backgroundDownload = new BackgroundDownloader();

  StorageFolder folder = await KnownFolders.PicturesLibrary.CreateFolderAsync("ONE", CreationCollisionOption.OpenIfExists);
   StorageFile newFile = await folder.CreateFileAsync(imageName, CreationCollisionOption.OpenIfExists);

          
    Uri uri = new Uri(imageUri);
    DownloadOperation download= backgroundDownload.CreateDownload(uri, newFile);

   await download.StartAsync();

}

將iamge控件上的地址和名字傳過來就ok了。

--------some words---------

1.Source 來源

2.Bit 點

3.map 地圖

4.bitmap 位圖

5.Uri:Uniform Resource identifier 統一資源標識符

6.Storage 存儲

7.Folder 文件夾

8.Interface 接口

9.Collision 碰撞

10. CreationCollisionOption 創建時發生碰撞的操作

11.

-------- -the end------------

UWP 後臺保存圖片