2018年02月10日
川俣晶の縁側ソフトウェア技術雑記total 663 count

UWPのGetThumbnailAsyncで取得したサムネール画像をキャッシュすると2回目の利用で何も得られない

Written By: 川俣 晶連絡先

問題 §

 UWPのStorageFile.GetThumbnailAsyncメソッドで取得したサムネール画像をキャッシュすると2回目の利用で何も描画されない。

 以下は問題が起きるコード例。i1とi2はXAMLのImage要素とする。

            FileOpenPicker openPicker = new FileOpenPicker();

            openPicker.ViewMode = PickerViewMode.Thumbnail;

            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

            openPicker.FileTypeFilter.Add(".jpg");

            StorageFile file = await openPicker.PickSingleFileAsync();

            if (file == null) return;

            var thum = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem);

            var bmi1 = new BitmapImage();

            bmi1.SetSource(thum);

            i1.Source = bmi1;

            var bmi2 = new BitmapImage();

            bmi2.SetSource(thum);

            i2.Source = bmi2;

原因 §

 StorageFile.GetThumbnailAsyncメソッドは実際には画像を返しているわけではなく、画像を得るための一種のストリーム的なものを返している。従って、一度最後まで読む出すと、2回目は既に最後まで読まれた後なので何も読み出せない。

解決 §

 GetThumbnailAsyncメソッドから得られた値は1回しか使わない。

 BitmapImageオブジェクトなら何回使っても良い。

 以下は解決例。

            FileOpenPicker openPicker = new FileOpenPicker();

            openPicker.ViewMode = PickerViewMode.Thumbnail;

            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

            openPicker.FileTypeFilter.Add(".jpg");

            StorageFile file = await openPicker.PickSingleFileAsync();

            if (file == null) return;

            var thum = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem);

            var bmi1 = new BitmapImage();

            bmi1.SetSource(thum);

            i1.Source = bmi1;

            i2.Source = bmi1;

感想 §

「特殊な変なテクニックと併用したので、気付くまで時間と手間を食ってしまった」

「なぜ気付くことができたの?」

「気分転換したからかな」

「やはり発想の転換が最重要なのだね」

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2018年
02月
13日
DataContractSerializer.XmlWriterメソッドでOutOfMemoryException例外が起きる場合がある
3days 66 count
total 507 count
【技術雑記】の前のコンテンツ
2018年
02月
05日
C#で型引数型の値を比較できない
3days 67 count
total 817 count
2018年02月10日
川俣晶の縁側ソフトウェア技術雑記total 663 count

UWPのGetThumbnailAsyncで取得したサムネール画像をキャッシュすると2回目の利用で何も得られない

Written By: 川俣 晶連絡先

問題 §

 UWPのStorageFile.GetThumbnailAsyncメソッドで取得したサムネール画像をキャッシュすると2回目の利用で何も描画されない。

 以下は問題が起きるコード例。i1とi2はXAMLのImage要素とする。

            FileOpenPicker openPicker = new FileOpenPicker();

            openPicker.ViewMode = PickerViewMode.Thumbnail;

            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

            openPicker.FileTypeFilter.Add(".jpg");

            StorageFile file = await openPicker.PickSingleFileAsync();

            if (file == null) return;

            var thum = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem);

            var bmi1 = new BitmapImage();

            bmi1.SetSource(thum);

            i1.Source = bmi1;

            var bmi2 = new BitmapImage();

            bmi2.SetSource(thum);

            i2.Source = bmi2;

原因 §

 StorageFile.GetThumbnailAsyncメソッドは実際には画像を返しているわけではなく、画像を得るための一種のストリーム的なものを返している。従って、一度最後まで読む出すと、2回目は既に最後まで読まれた後なので何も読み出せない。

解決 §

 GetThumbnailAsyncメソッドから得られた値は1回しか使わない。

 BitmapImageオブジェクトなら何回使っても良い。

 以下は解決例。

            FileOpenPicker openPicker = new FileOpenPicker();

            openPicker.ViewMode = PickerViewMode.Thumbnail;

            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

            openPicker.FileTypeFilter.Add(".jpg");

            StorageFile file = await openPicker.PickSingleFileAsync();

            if (file == null) return;

            var thum = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem);

            var bmi1 = new BitmapImage();

            bmi1.SetSource(thum);

            i1.Source = bmi1;

            i2.Source = bmi1;

感想 §

「特殊な変なテクニックと併用したので、気付くまで時間と手間を食ってしまった」

「なぜ気付くことができたの?」

「気分転換したからかな」

「やはり発想の転換が最重要なのだね」

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2018年
02月
13日
DataContractSerializer.XmlWriterメソッドでOutOfMemoryException例外が起きる場合がある
3days 66 count
total 507 count
【技術雑記】の前のコンテンツ
2018年
02月
05日
C#で型引数型の値を比較できない
3days 67 count
total 817 count
【技術雑記】のコンテンツ全リスト【技術雑記】の表紙

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20180210171748
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.25 (Alpha-Test) Copyright (c) 2004-2017 Pie Dey.Co.,Ltd.