酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

ロック画面で使用している画像を取得する

この記事は、2012/7/17現在にリリースされている最新の「Windows 8 Release Preview(Build 8400)」、「Visual Studio 2012 RC」を利用しております。「Windows 8 Release Preview」は開発中のものであることにご留意ください。

Windows.System.UserProfile名前空間のLockScreenクラスを使うことで、ロック画面で使用している画像を取得することができます。

Grid上にImageコントロールを配置したXAMLを作成しておきます。配置したImageコントロールにはロック画面で使用している画像を表示させます。

<Page
    x:Class="LockScreenSample.MainPage"
    IsTabStop="false"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:LockScreenSample"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Image x:Name="image" HorizontalAlignment="Left" Height="300" VerticalAlignment="Top" Width="500"/>
    </Grid>
</Page>

LockScreenクラスのOriginalImageFileプロパティを参照することで現在のロック画面のURIを取得することができます。このままURIを読み込んでも良いのですが、もっとシンプルに画像を取り出す方法があります。

LockScreenクラスのGetImageStreamメソッドを使用して、現在のロック画面のストリームを取得し、WritebleBitmapインスタンスを作成し、ImageコントロールのSourceプロパティに設定します。

// 現在のロック画面のURIを取得する
var uri = LockScreen.OriginalImageFile;
// 結果:{file:///C:/WINDOWS/Web/Screen/img100.jpg}

// 現在のロック画面のストリームを取得し、WriteableBitmapを作成する
var strm = LockScreen.GetImageStream();
var bmp = new WriteableBitmap((int)image.Width, (int)image.Height);
bmp.SetSource(strm);

// ロック画面に使用されている画像を画面上に表示する
image.Source = bmp;

上記のコードを実行すると、以下のようになります。