Windows 8.1 之文件
Windows 8.1 Preview 為應(yīng)用內(nèi)文件管理提供增強(qiáng)支持,應(yīng)用可訪問(wèn)的用戶(hù)庫(kù)選擇范圍更寬以及可以將應(yīng)用的唯一內(nèi)容推送至 Windows 索引。 這意味著你的應(yīng)用可輕松訪問(wèn)用戶(hù)內(nèi)容并且使其自身內(nèi)容輕松顯示給其他應(yīng)用。
Windows 8.1 Preview 中的新特性或更新
- 更新后的文件選取器支持新的應(yīng)用顯示模式
- 應(yīng)用內(nèi)的用戶(hù)庫(kù)管理
- 檢索父文件或文件夾
- 使用 IsEqual 來(lái)比較文件
- 新增的 KnownFolders 屬性
- 文件檢索時(shí)無(wú)錯(cuò)誤處理要求
- 在打開(kāi)(方式)應(yīng)用場(chǎng)景中允許查看文件
- 將應(yīng)用內(nèi)容添加到 Windows 索引中
- Microsoft SkyDrive
- DDS 圖像文件支持
更新后的文件選取器支持新的應(yīng)用顯示模式
在 Windows 8.1 Preview 中,以拆分屏幕和全屏顯示方式運(yùn)行的應(yīng)用可以調(diào)用文件選取器。這有助于用戶(hù)操作,并且可以根據(jù)他們的需要,執(zhí)行多項(xiàng)任務(wù)。例如,假如用戶(hù)在一個(gè)窗口中打開(kāi) 了 Skype 會(huì)話,而在另一窗口中打開(kāi)了電子郵件應(yīng)用,電子郵件應(yīng)用可以為用戶(hù)打開(kāi)文件選取器以便包含一個(gè)附件,而此時(shí)應(yīng)用無(wú)需轉(zhuǎn)成全屏顯示。若要了解有關(guān)使用文件選 取器的詳細(xì)信息,請(qǐng)參閱快速入門(mén):使用文件選取器訪問(wèn)文件。
應(yīng)用內(nèi)的用戶(hù)庫(kù)管理
Windows 8.1 Preview 引入了 StorageLibrary 類(lèi),該類(lèi)允許用戶(hù)在應(yīng)用內(nèi)管理其個(gè)人庫(kù)(例如“音樂(lè)”和“視頻”)中的文件夾。這在媒體庫(kù)應(yīng)用中特別有用,因?yàn)橛脩?hù)通常需要添加含有大量圖像、音樂(lè)或視頻的文件夾來(lái)擴(kuò)展其集合。
經(jīng)過(guò)特殊化處理的文件選取器可以實(shí)現(xiàn)上述需求,使用 StorageLibrary 方法進(jìn)行調(diào)用后,允許用戶(hù)將文件夾添加到他們的庫(kù)中。用戶(hù)不再需要退出應(yīng)用并轉(zhuǎn)到桌面上來(lái)擴(kuò)展他們的媒體集合。
Note 新的 StorageLibrary 類(lèi)還可以定義一個(gè)從庫(kù)中刪除文件的方法,但是若要在應(yīng)用中實(shí)現(xiàn)該功能,則需要自定義的 UI 元素。
檢索父文件或文件夾
Windows 8 的存儲(chǔ) API 沒(méi)有定義直接檢索存儲(chǔ)項(xiàng)的父文件夾的方法,所以要求你編寫(xiě)自己的自定義邏輯。在 Windows 8.1 Preview 中,你可以使用 GetParentAsync 方法獲取文件或文件夾的父 StorageFolder。
Important 要讓 GetParentAsync 方法成功,你必須擁有對(duì)父級(jí)的訪問(wèn)權(quán)限,可通過(guò)聲明庫(kù)能力或在未來(lái)訪問(wèn)列表中保留更高級(jí)的文件夾實(shí)現(xiàn)。 此外,如果你無(wú)法訪問(wèn)父文件或文件夾,此方法也不會(huì)拋出異常,而是返回 null。
使用 IsEqual 來(lái)比較文件
若要直接比較各個(gè)存儲(chǔ)項(xiàng)以確定它們是否表示的是相同的項(xiàng),Windows 8 的存儲(chǔ) API 并沒(méi)有定義此方法。開(kāi)發(fā)人員通過(guò)比較路徑來(lái)解決這個(gè)問(wèn)題,然而他們?nèi)钥赡軙?huì)遇到不具備路徑值的存儲(chǔ)項(xiàng)。在 Windows 8.1 Preview 中,你可以使用 IsEqual 方法來(lái)確定兩個(gè)存儲(chǔ)項(xiàng)是否顯示的是相同的文件。
下面的示例顯示了如何使用新方法比較兩個(gè)存儲(chǔ)文件是否相同。
- function openNewFile() {
- var picker = new Windows.Storage.Pickers.FileOpenPicker;
- picker.fileTypeFilter.replaceAll(["*"]);
- picker.pickSingleFileAsync().then(function (file) {
- var alreadyOpenedFile = null;
- _openFiles.some(function (openFile) {
- if (file.IsEqual(openFile.file)) {
- alreadyOpenedFile = openFile;
- return true;
- }
- return false;
- });
- if (alreadyOpenedFile != null) {
- alreadyOpenedFile.window.activate();
- } else {
- createNewFileViewerWindow(file);
- }
- });
- }
新增的 KnownFolders 屬性
Windows 8.1 Preview 引入了兩個(gè)新 KnownFolders 屬性,這允許你在兩個(gè)其他的位置訪問(wèn)文件:CameraRoll 和 Playlists。
KnownFolders.CameraRoll 屬性允許你訪問(wèn)使用設(shè)備相機(jī)拍攝的圖片—這跟現(xiàn)有的 Windows Phone 8 屬性相似。KnownFolders.Playlists 屬性允許你訪問(wèn)用戶(hù)的播放列表
文件檢索時(shí)無(wú)錯(cuò)誤處理要求
Windows 8.1 Preview 引入的 StorageFolder.TryGetItemAsync 方法允許應(yīng)用嘗試按照名稱(chēng)來(lái)檢索文件或文件夾,無(wú)需在應(yīng)用代碼中添加錯(cuò)誤捕捉邏輯。如果找不到文件或文件夾,TryGetItemAsync 返回 null,并不拋出異常。因?yàn)樵摲椒ǚ祷?null,你也可以使用它來(lái)確定是否存在特定的文件或文件夾。
在打開(kāi)(方式)應(yīng)用場(chǎng)景中允許查看文件
在 Windows 8.1 Preview 中,你可以使用 NeighboringFilesQuery 屬性,瀏覽激活應(yīng)用的文件周?chē)奈募?/p>
在 Windows 8 中,使用特定文件關(guān)聯(lián)打開(kāi)內(nèi)容的默認(rèn)應(yīng)用只能獲得一個(gè)代表所調(diào)用文件的對(duì)象。 這對(duì)于媒體庫(kù)應(yīng)用而言是一個(gè)問(wèn)題,因?yàn)橛脩?hù)希望瀏覽周?chē)奈募?。?Windows 8.1 Preview 中,默認(rèn)應(yīng)用可以獲得周?chē)?視圖中的文件集合—即從中選擇所調(diào)用文件的集合。
你的應(yīng)用需要聲明特定的庫(kù)功能,以便獲取相應(yīng)類(lèi)型的條目。 例如,若要獲取 NeighboringFilesQuery 中的圖片,應(yīng)用必須聲明“圖片庫(kù)”功能。
本示例顯示了如何檢索激活應(yīng)用的文件周?chē)奈募稀?/p>
- function activated(sender, e) {
- if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.file && e.files.size > 0) {
- var invokedFile = e.detail.files[0];
- var neighboringFiles = e.detail.neighboringFilesQuery;
- if (neighboringFiles) {
- result.neighboringFiles.findStartIndexAsync(e.detail.files[0]).done(function (index) {
- var invokedFileElement = document.getElementById("invokedFile");
- invokedFileElement.textContent = "Invoked item: " + invokedFile.name + ", at index " + index + " in view file enumeration.";
- var prevFileslist = document.getElementById("prevFilesList");
- result.neighboringFiles.getFilesAsync(0, index).done(function (fileList) {
- fileList.forEach(function (file) {
- // Create an entry in the list for the file.
- var fileItemElement = document.createElement("li");
- fileItemElement.textContent = file.name;
- prevFileslist.appendChild(listItemElement);
- });
- },
- function (error) {
- // Handle error trying to get list of files.
- });
- var nextFileslist = document.getElementById("nextFilesList");
- result.neighboringFiles.getFilesAsync(index + 1, -1).done(function (fileList) {
- fileList.forEach(function (file) {
- // Create an entry in the list for the file.
- var fileItemElement = document.createElement("li");
- fileItemElement.textContent = file.name;
- nextFileslist.appendChild(listItemElement);
- });
- },
- function (error) {
- // Handle error trying to get list of files.
- });
- },
- function (error) {
- // Handle error trying to get file index.
- });
- }
- }
- }
- app.addEventListener("activated", activated);
#p#
將應(yīng)用內(nèi)容添加到 Windows 索引中
在 Windows 8.1 Preview 中,可以直接將應(yīng)用內(nèi)容添加到 Windows 索引。將應(yīng)用內(nèi)容添加到索引中可以確保在使用 ApplicationIndexedContent 文件夾的查詢(xún)或使用新增的應(yīng)用內(nèi)搜索控件時(shí),快速搜索應(yīng)用內(nèi)容。你可以使用 Windows.Storage.Search 中新增的 API 集,或者通過(guò)創(chuàng)建 "appcontent-ms" 文件,在索引中添加文件屬性和內(nèi)容。
SkyDrive
在 Windows 8.1 Preview 中,SkyDrive 提供兩項(xiàng)全新的功能更新:
- 文件存儲(chǔ)
讓 SkyDrive 成為用戶(hù)文檔、圖片和視頻的默認(rèn)存儲(chǔ)位置,可將 SkyDrive 輕松集成到你的應(yīng)用。只要實(shí)例化應(yīng)用中的 FileSavePicker 或 FileOpenPicker 對(duì)象,默認(rèn)情況下文件選取器就會(huì)打開(kāi) SkyDrive。但用戶(hù)必須登錄自己的 Microsoft 帳戶(hù)才能實(shí)現(xiàn)此操作。(也可將文件選取器的 SuggestedStartLocation 屬性設(shè)置到非 SkyDrive 的位置。)
- SkyDrive 存儲(chǔ)管理工具
我們改進(jìn)了 Windows 8.1 Preview 上的 SkyDrive 存儲(chǔ)配額管理體驗(yàn)。用戶(hù)可直接從 Windows 管理 SkyDrive,無(wú)需轉(zhuǎn)到 skydrive.com。他們可查看存儲(chǔ)使用情況、升級(jí)存儲(chǔ)計(jì)劃并回收 SkyDrive 上的空間,完全無(wú)需離開(kāi) Windows 8.1 Preview 界面。
DDS 圖像文件支持
使用 JavaScript 和可擴(kuò)展應(yīng)用程序標(biāo)記語(yǔ)言 (XAML) WebView 控件的 Windows 應(yīng)用商店應(yīng)用現(xiàn)在支持 Microsoft DirectDraw 表面 (DDS) 文件格式,從而使你能夠創(chuàng)建運(yùn)行速度更快的 WebGL 應(yīng)用,這類(lèi)應(yīng)用即使是在使用較大紋理的情況下,也能更快速地運(yùn)行 。
關(guān)于塊壓縮和 DDS
塊壓縮 (BC) 是一種用于在 DirectDraw 表面 (DDS) 文件中存儲(chǔ)像素?cái)?shù)據(jù)的壓縮類(lèi)。與其他圖像文件格式不同,圖形處理器 (GPU) 可以直接從塊壓縮格式中采樣,而無(wú)需任何解壓縮或處理,從而能夠改進(jìn)在 Windows 應(yīng)用商店應(yīng)用中加載紋理資源的性能。對(duì)于 BC 格式,平均每個(gè)像素使用 4-8 位,而對(duì)于常規(guī)的 RGBA 紋理,每個(gè)像素使用 32 位。因此,塊壓縮格式還能將總 GPU 內(nèi)存使用量降低多達(dá) 87.5%,從而允許在 Windows 應(yīng)用商店應(yīng)用中使用大量或較高質(zhì)量的資產(chǎn)。
盡管有很多塊壓縮算法,但 Windows 8.1 Preview 上使用 JavaScript 和 XAML WebView 控件的 Windows 應(yīng)用商店應(yīng)用在 DDS 文件格式中只支持三種類(lèi)型的塊壓縮:BC1、BC2 和 BC3。由于經(jīng)過(guò)塊壓縮的 DDS 圖像幾乎不需要任何 CPU 解碼時(shí)間,因此它的加載速率比 JPEG 圖像快得多,同時(shí)由于塊壓縮使用的 GPU 內(nèi)存較少,你還可以使用更多的紋理資源。經(jīng)過(guò)塊壓縮的 DDS 文件是適用于內(nèi)置游戲背景和紋理的理想圖像格式。
如何在 DDS 文件中使用塊壓縮
在使用 JavaScript 或 XAMLWebView 控件的 Windows 應(yīng)用商店應(yīng)用中將你的圖像資產(chǎn)轉(zhuǎn)換為塊壓縮格式時(shí),需要考慮以下限制:
- 僅支持與以下 DXGI_FORMAT 枚舉值對(duì)應(yīng)的 BC1、BC2 和 BC3 塊壓縮格式:
- DXGI_FORMAT_BC1_UNORM
- DXGI_FORMAT_BC2_UNORM
- DXGI_FORMAT_BC3_UNORM
- 必須使用預(yù)乘 Alpha。支持使用顯式定義預(yù)乘 Alpha(DXT1、DXT2 和 DXT4)的格式的舊 DDS 文件,以及使用 DDS_HEADER_DX10 結(jié)構(gòu)和有效 DDS_ALPHA_MODE 值(DDS_ALPHA_MODE_OPAQUE 和 DDS_ALPHA_MODE_PREMULTIPLIED)的新 DDS 文件。
- X 和 Y 維度必須是 4 像素的倍數(shù)。
- DDS 中不支持立體紋理、立方圖、mipmap 或紋理格式。
如果你不遵守這些限制,你的 DDS 文件將無(wú)法加載到使用 JavaScript 或 XAML WebView 控件的 Windows 應(yīng)用商店應(yīng)用中。有關(guān)詳細(xì)信息,請(qǐng)參閱此鏈接。
在 DDS 文件中創(chuàng)建塊壓縮資產(chǎn)后,可以在標(biāo)記中加載 DDS 文件,或通過(guò) JavaScript 進(jìn)行加載:
HTML
- <img src=”sample.dds” />
JavaScript
- var img = new Image();
- img.src = “sample.dds”;
何時(shí)使用塊壓縮格式
如上所述,經(jīng)過(guò)塊壓縮的 DDS 文件可顯著增加你能夠在 Windows 應(yīng)用商店應(yīng)用中使用的較大紋理的數(shù)量,并且可以提高應(yīng)用的加載速度。但是,盡管經(jīng)過(guò)塊壓縮的 DDS 文件在 GPU 內(nèi)存使用方面更加高效,而與 JPEG 文件相比,卻占用較多的磁盤(pán)空間。經(jīng)過(guò)塊壓縮的 DDS 文件格式不適合通過(guò)網(wǎng)絡(luò)下載,因此最好將這類(lèi)文件用作應(yīng)用程序包中的本地資產(chǎn)。盡管在 Internet Explorer 11 Preview 上支持經(jīng)過(guò)塊壓縮的 DDS 文件,但由于需要較高的網(wǎng)絡(luò)成本,因此不推薦在 Web 上使用這種格式。
由于塊壓縮格式會(huì)降低質(zhì)量,因此就像使用其他類(lèi)似的格式那樣,必須確保在轉(zhuǎn)換為塊壓縮格式時(shí)不會(huì)降低視覺(jué)質(zhì)量。塊壓縮對(duì)于真實(shí)的“自然”圖像處理效果非常好,但對(duì)于強(qiáng)烈的漸變和色移會(huì)出現(xiàn)失真。
原文鏈接:http://msdn.microsoft.com/zh-cn/library/windows/apps/bg182881.aspx