ブログ用 画像ユーティリティ ② コマンドライン引数の処理

Published 23 February 09 10:00 AM | hiroyuk 

コマンドライン引数の処理にはApplication.Startupイベントの記事を利用します。

App.xamlにスタートアップ メソッド名を追加して(app_Startup)、App.xaml.csでそのメソッドを実装します。VgaBitmapは後述する画像用のコンテナクラスです。内容は単にコマンドラインからファイル名を取得し、VgaBitmapをコンストラクトして、Saveメソッドを呼び出して保存し、this.Shutdown()を呼び出して終了するだけです。

最初はWindows1.xaml.csで同じことをやっていたのですが、ウィンドウを開いてすぐ閉じると、表示するWPFコンポーネントとBimapImageコンストラクションとの衝突があるのか、BitmapImage関連の例外を投げるときがあったので、App.xaml.csだけで処理することにしました。

この実装では何も表示せずサイレントに終わってしまうので、メッセージボックスとか、音とか、アニメーションがあったほうが正しいUXのような気もします。この使い方のときは、複数画像をドラッグすると全て処理します(起動してからは、ウィンドウに表示できるのが1つの画像だけなので、処理できるのも1画像だけです)。

<Application x:Class="ImageManipulation.App"
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
Startup="app_Startup" StartupUri="Window1.xaml">
  <Application.Resources>
  </Application.Resources>
</Application>

public partial class App : Application

  /// <summary>
  /// コマンドラインを処理するスタートアップ 
  /// </summary>
  void app_Startup(object sender, StartupEventArgs e)
  {
    if (e.Args.Length == 0) return;
    foreach (string argument in e.Args)
    {
      if (argument.Contains(".jpg") ||
          argument.Contains(".JPG"))
      {
 
        VgaImageUC vga = new VgaImageUC(argument);
        vga.Save();
      }

      else
      {
        MessageBox.Show("jpg以外の画像は処理できません、
         
jpgの画像をドラッグしてください",
          "Not jpg file", MessageBoxButton.OK);

      }
    }
    this.Shutdown();
  }
}

追記:UserControlバージョンにコードを修正

Comments

No Comments
Anonymous comments are disabled

About hiroyuk

マイクロソフト㈱エバンジェリスト。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)、Texturing & Modeling, A Procedural Approach などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。

Search

This Blog

DirectX 情報

Silverlight 情報

Windows 情報

WPF 情報

並列コンピューティング情報

著書

Syndication

Page view tracker