Hatena::ブログ(Diary)

酢ろぐ(ch3cooh.jp) RSSフィード


CH3COOH(酢酸)の実験室
Baseball Japan / ○○時計 for WP7 / for WM
Windows Phone 7 開発 Tips

2012-02-04

アプリリソースのファイルを分離ストレージにコピーする

アプリケーション内に存在しているビルドアクションを「コンテンツ」にした画像ファイルを、分離ストレージにコピーします。

f:id:ch3cooh393:20120204053413p:image

アプリリソースとして存在しているimage01.gif〜image07.gifストリームを取得して、分離ストレージのユーザーストアにファイルを作成して、データを書き込みます。

// アプリリソースの画像ファイルを分離ストレージにコピーする
void CopyData() {
    using (var store = IsolatedStorageFile.GetUserStoreForApplication()) {
        for (int i = 1; i <= 7; i++) {
            // ファイル名を作成
            var fileName = string.Format("image{0:d2}.gif", i);

            // 同名のファイルが存在している場合、ファイルを削除する
            if (store.FileExists(fileName)) {
                store.DeleteFile(fileName);
            }

            var uri = new Uri(fileName, UriKind.Relative);
            using (var strmReader = Application.GetResourceStream(uri).Stream)
            using (var strmWriter = store.OpenFile(fileName, FileMode.CreateNew)) {
                // アプリリソースのストリームを読み出す
                var bytes = new byte[strmReader.Length];
                strmReader.Read(bytes, 0, bytes.Length);

                // 分離ストレージに保存する
                strmWriter.Write(bytes, 0, bytes.Length);
            }
        }
    }
}

Windows Phoneでサポートしているメディアファイル(静止画画像編)

Windows Phoneで対応しているメディア形式*1は以下の通りです。

MAGファイルなどは扱えませんが、インターネット上で使用されている画像フォーマットの大半を占める代表的なフォーマットを扱えることが分かりました。

しかし、これらのメディアファイルを扱えるのは、電子メールアプリの添付画像の閲覧時やInternet Explorer Mobileでの表示のみです。

残念ながら、Silverlightアプリケーションでサポートされている形式はJPEGPNGの2つ。更にいうとデフォルトでカメラロールへの保存に対応しているのはJPEGのみです。

フォーマット読み込み分離ストレージへの保存カメラロールへの保存
JPEG
PNG×
BMP×
GIF×

以上のことから標準的なWindows Phoneアプリケーション画像の保存に対応するのであれば、画像フォーマットはJPEG一択となります。

表ではにしましたが、読み込みと分離ストレージでの保存で問題ないのであれば、Codeplexホスティングされているオープンソースプロジェクトの.NET Image Toolsというプロダクトをお使いください。