Hatena::Diary

Yuya Yamaki’s blog このページをアンテナに追加 RSSフィード

2010年02月09日(火曜日)

SilverlightでGIF画像

BitmapImage Class (System.Windows.Media.Imaging)


The BitmapImage can be used to reference images in the JPEG and PNG file formats.

BitmapImage を使用すると、JPEG および PNG ファイル形式のイメージを参照できます。


Silverlightで表示可能な画像の形式はJPEGとPNGです。アプリケーションで使用する画像をすべて自前で用意する場合には単純にあらかじめ変換しておけばよいだけの話ですが、外部のサービスと連携してそこから画像を取得するとなるとそうもいきません。


MAKOTO3.COM » Blog Archive » SilverlightがGIFをサポートしていないのは、やはりちょっと困る……


楽天のWebサービスを使って商品画像をとってくると、けっこうGIF画像が含まれているので、Silverlightで表示できないという問題にぶつかりました。


他にも、たとえばTwitterクライアントをSilverlightで作成した場合、TwitterのアイコンはGIFもサポートしているためGIF形式の画像を使っている人のアイコンは表示されないという問題が発生します。


f:id:Yamaki:20100209100205p:image


TwittZure - Twitter on Windows Azure


f:id:Yamaki:20100209095822p:image


ComponentOne Studio 2010JにはC1Imageというコントロールが含まれており、このコントロールを使うことでSilverlightで簡単にGIF画像を表示することができます。もちろんアニメーションGIFにも対応しています。

ComponentOne Studio > Image for Silverlight > 製品概要


f:id:Yamaki:20100209101550p:image


このコントロールはクライアント側のみでデコードを行いますので、もちろんサーバー側にサービスを用意する必要はありません。


ComponentOne Studio 2010Jは、明日(2010年2月10日)発売です。


2010年01月27日(水曜日)

SilverlightでDataSet

 SilverlightではDataSetがサポートされてい(DataSetやDataTableといったクラスがあり)ません。新規開発であれば、ADO.NET Data Servicesフレームワークや今後正式なリリースが予定されているWCF RIA Servicesを使う方法になるかと思いますが、既存資産の活用という観点ではSilverlightにもDataSetが欲しいところです。


 2月10日にグレープシティから発売予定のComponentOne Studioに含まれるSilverlightコンポーネントでは、「C1.Silverlight.Data.dll」というアセンブリにおいてDataSet、DataTable、DataViewといったおなじみのクラスが提供されており、これらを利用することでDataSetを使った既存資産をSilverlightでもほぼそのまま活用することができます。


f:id:Yamaki:20100127170121p:image


 例えば、Windowsフォームで下記のようにコーディングしていたものは、


Windowsフォーム

// 変更をサーバーに確定させる
private void _btnCommit_Click(object sender, EventArgs e)
{
    if (_ds != null)
    {
        // 変更状態ごとにバイト配列に格納します
        byte[] dtAdded = GetChanges(DataRowState.Added);
        byte[] dtModified = GetChanges(DataRowState.Modified);
        byte[] dtDeleted = GetChanges(DataRowState.Deleted);
 
        // サービスの呼び出し
        var svc = GetDataService();
        svc.UpdateData(dtAdded, dtModified, dtDeleted);
    }
}
 
byte[] GetChanges(DataRowState state)
{
    DataSet ds = _ds.GetChanges(state);
    if (ds != null)
    {
        MemoryStream ms = new MemoryStream();
        ds.WriteXml(ms);
        return ms.ToArray();
    }
    return null;
}


ComponentOne Studioの「C1.Silverlight.Data.dll」を使うことで、


Silverlight

// 変更をサーバーに確定させる
 private void _btnCommit_Click(object sender, RoutedEventArgs e)
 {           
    if (_ds != null)
    {
        // 変更状態ごとにバイト配列に格納します
        byte[] dtAdded = GetChanges(DataRowState.Added);
        byte[] dtModified = GetChanges(DataRowState.Modified);
        byte[] dtDeleted = GetChanges(DataRowState.Deleted);
 
        // サービスの呼び出し
        var svc = GetDataService();
        svc.UpdateDataCompleted += svc_UpdateDataCompleted;
        svc.UpdateDataAsync(dtAdded, dtModified, dtDeleted);
    }
 }
 
 byte[] GetChanges(DataRowState state)
 {
    DataSet ds = _ds.GetChanges(state);
    if (ds != null)
    {
        MemoryStream ms = new MemoryStream();
        ds.WriteXml(ms);
        return ms.ToArray();
    }
    return null;
 }
 
 void svc_UpdateDataCompleted(object sender, UpdateDataCompletedEventArgs e)
 {
    if (!string.IsNullOrEmpty(e.Result))
    {
        throw new Exception("サーバーの更新中にエラーが発生しました。: " + e.Result);
    }
    _tbStatus.Text = "サーバーに変更が適用されました。";
    _ds.AcceptChanges();
 }


のようにSilverlightで書きなおすことができます。SilverlightではWebサービスの呼び出しが非同期に限られているため少しコーディング量が増えていますが、もしWindowsフォームでも非同期呼び出しを行っていればまったく同様となります。上記の部分で異なってくるとすれば、ボタンのClickイベントの引数がRoutedEventArgsになるくらいです。


 この「C1.Silverlight.Data.dll」を使用したサンプルプロジェクトを下記の場所に置いておきます。


DataSetを使用したマスター詳細サンプル(C1.Silverlight.Data)


f:id:Yamaki:20100127171356p:image


 このサンプルプロジェクトは本日(1/27)に公開になったComponentOne Studioのトライアル版でもお試しいただけます。ぜひインストールして実際に触ってみてください。


ComponentOne Studio 2010J ダウンロード | グレープシティ株式会社


2010年01月25日(月曜日)

Developers Summit 2010

2010年2月18日(木)〜2月19日(金)の2日間、Developers Summit 2010が開催されます。

世界は変わった。開発の現場はどうか? Developers Summit 2010

f:id:Yamaki:20100125163545g:image


グレープシティもブース出展で参加するほか、「WPF 4とSilverlight 4、これから業務アプリを開発するならどっち?」というタイトルで1セッション私が担当させていただきます。本日[残席僅か]となりましたので、ご参加いただける方は早目のご登録をお願いいたします。

WPF 4 と Silverlight 4、これから業務アプリを開発するならどっち?


また、このセッションに連動する形でセッションタイトルそのままのアンケートを実施しています。

Developers Summit 2010 連動アンケート | グレープシティ株式会社


セッションにご参加いただける方も、そうでない方も、ご協力よろしくお願いいたします。アンケート結果はセッション内で発表します。


2010年01月20日(水曜日)

無償でPC画面上の操作をキャプチャできるソフト「Expression Encoder 3無料版」

Microsoft Expression Encoder 3(フリー版)でスクリーンキャストを撮る方法 - あおきのTechメモ


 Microsoft Expression Encoder 3には、「Encoder 3」とは別に「Encoder 3 Screen Capture」というソフトが付属しており、これを使うことでPC画面上の操作、あるいはWebカメラ の映像などをキャプチャして編集することができます。このことはマイクロソフトの新村さんのblogなどでも紹介されており、ご存知の方も多いかと思います。


 しかしながら、この「Encoder 3 Screen Capture」は無償で利用できるということをご存知でしたでしょうか。私は知りませんでした。


 Expression Encoder 3の通常版は単体では販売しておらず、以下の製品に含まれています。

  • Expression Studio 3
  • Expression Web 3
  • Expression Professional Subscription


 この通常版からIIS Smooth StreamingとH.264エンコーディングのサポートを抜いたものが、無償で提供されているExpression Encoder 3無料版です。


ダウンロードの詳細 : Expression Encoder 3


 「Encoder 3 Screen Capture」は、この無料版にも含まれています。具体的な使い方などは下記のblogが詳しいかと思います。


Exppression Encoder 3 を少しだけ触ってみた - Commolog


2010年01月12日(火曜日)

わんくま同盟 東京勉強会 #42

わんくま同盟 東京勉強会 #42

f:id:Yamaki:20100112105517p:image


2010年1月16日(土)に新宿で「わんくま同盟 東京勉強会 #42」が開催されます。

今回はWPFSilverlight Dayとなっており、マイクロソフトさんからはジニアス平井さんと大西さんのお二人という豪華メンバーがご登壇となっています。そのお二人とえムナウさんのお三方でWPFやSilverlightについてのお題についてその場でコーディングをしながら解説するというセッションは、初めての試みだそうでおもしろそうです。


私も30分のミニセッションと初めてライトニングトークに挑戦します。まだ参加登録は可能なようですので、都合がつく方はぜひご参加ください。


2010/01/18セッション資料追加

WPFピンポイント講座〜リソース編〜


エフスタ!!勉強会 Vol.1

2月6日 エフスタ!!勉強会 Vol.1 ITをもっと自由に、もっと面白く(福島県)

f:id:Yamaki:20100112110110p:image


2010年2月6日(土)に福島県の郡山市で「エフスタ!!勉強会 Vol.1」が開催されます。

「エフスタ!!」は東北(福島県)からIT情報を発信するITエンジニアのためのスキルアップ応援コミュニティです。今回マイクロソフトさんから松崎さんと小高さんのお二人がご登壇されることになっており、東北地方では貴重な勉強会と言えそうです。


私も「やっぱり新しいものはいいのだ♪WPF/Silverlightで変わるUI開発の世界」というタイトルで、WPF/Silverlightの主に業務系における魅了をご紹介する予定です。


福島県在住の方はもちろんのこと、宮城、山形、新潟、栃木、茨城で比較的近い場所にお住まいの方も、ぜひご参加いただきたいと思います。