SQLの窓

2012年10月05日


Windows8 画像コントロール(Image) へファイルから表示する手順(C#)




1) FileOpenPicker オブジェクトを使って、目的のファイルに対応する StorageFile オブジェクトを作成
2) StorageFile オブジェクトの OpenAsync メソッドで目的のファイルに対するストリーム(random-access stream)を取得
3) BitmapImage オブジェクトSetSource メソッドでストリームを渡す
4) BitmapImage そのものを、Image コントロールの Source プロパティにセット

private async Task DisplayImageFileAsync(StorageFile file)
{
	// Request persisted access permissions to the file the user selected.
	// This allows the app to directly load the file in the future without relying on a
	// broker such as the file picker.
	m_fileToken = m_futureAccess.Add(file);

	// Display the image in the UI.
	BitmapImage src = new BitmapImage();
	src.SetSource(await file.OpenAsync(FileAccessMode.Read));
	Image1.Source = src;
	AutomationProperties.SetName(Image1, file.Name);

	// Use BitmapDecoder to attempt to read EXIF orientation and image dimensions.
	await GetImageInformationAsync(file);

	ExifOrientationTextblock.Text = Helpers.GetOrientationString(m_exifOrientation);
	UpdateImageDimensionsUI();

	ScaleSlider.IsEnabled = true;
	RotateLeftButton.IsEnabled = true;
	RotateRightButton.IsEnabled = true;
	SaveButton.IsEnabled = true;
	SaveAsButton.IsEnabled = true;
	CloseButton.IsEnabled = true;
}

▲ Microsoft の実際のサンプルコード
FileAccessMode enumeration



posted by lightbox at 2012-10-05 15:11 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする

Windows8 の非同期処理(C#)

Windows8 の非同期処理は、イベント用のコールバックメソッドを用意するのでは無く、同期処理のようにソース行の記述と同じ順序で処理を実行する事ができます。その為に必要な記述方法として、await 演算子とasync キーワード が用意されています。



await 演算子を使うメソッドには、async キーワードでマークされた宣言が必要です。

非同期メソッドの戻り値の型は Task または Task<TResult> です。

最も外側のメソッドで try/catch ブロックを使うと、ネストされている非同期メソッドのエラーをキャッチできます(同期メソッドで例外をキャッチする方法と同様)。


Microsoft の解説ページ

非同期 API の呼び出し
FileOpenPicker.PickSingleFileAsync

// 呼び出し側
private async void Open_Click(object sender, RoutedEventArgs e)
{
	ResetPersistedState();
	ResetSessionState();

	try
	{
		rootPage.NotifyUser("Opening image file...", NotifyType.StatusMessage);

		StorageFile file = await Helpers.GetFileFromOpenPickerAsync();

		await DisplayImageFileAsync(file);

		rootPage.NotifyUser("Loaded file from picker: " + file.Name, NotifyType.StatusMessage);
	}
	catch (Exception err)
	{
		rootPage.NotifyUser("Error: " + err.Message, NotifyType.ErrorMessage);
		ResetSessionState();
		ResetPersistedState();
	}
}

// 非同期メソッド
public static async Task<StorageFile> GetFileFromOpenPickerAsync()
{
	// Attempt to ensure that the view is not snapped, otherwise the picker will not display.
	if (ApplicationView.Value == ApplicationViewState.Snapped && !ApplicationView.TryUnsnap())
	{
		throw new Exception("File picker cannot display in snapped view.");
	}

	FileOpenPicker picker = new FileOpenPicker();
	FillDecoderExtensions(picker.FileTypeFilter);
	picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
	StorageFile file = await picker.PickSingleFileAsync();

	if (file == null)
	{
		throw new Exception("User did not select a file.");
	}

	return file;
}

▲ サンプル全体はこちらから参照できます


posted by lightbox at 2012-10-05 13:52 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり