読者です 読者をやめる 読者になる 読者になる

Silverlight 3 on VS2010

Visual Studio 2010 betaのインストール後に、

をインストールすると、VS2010でSilverlight 3用のプロジェクトが作成できるようになる。デバッグを行うには、どうやら、

も必要な模様。

今のところ、Silverlight 3用のプロジェクトは、

のいずれかの環境で開発ができるみたいだけど、VSを使い慣れているのであれば、おそらく、VS2010を使う方法が一番、やりやすい。

Expression Blendは悪くないのだけど、Illustrator系の操作に慣れてないと、きつい。(あと、黒基調のGUIに白いペーンが表示されると目が辛い;幸い、カスタマイズできるけど)

VS2008の場合は、イベントハンドラの挿入がIntelliSense経由だけっぽいのと、デザイナが基本的に、XAMLを直書きonly(実は、デザイナは、XAMLのペーンの下のボーダーにマウスカーソルを近づけると出てくる)なのが辛い。それにプロパティの編集が事実上、XAMLを修正することによってしかできない。

f:id:espresso3389:20090717152145p:image

Silverlight 3 で巨大画像は開けるのか

個人的には、会社の仕事がA3 300dpiとかの画像の処理とかが多いので、どの程度までのピクセル数を扱えるのかが結構重要。
外部のJPEGファイルを適当に読み込んだ感じでは、8000x5000とかぐらいなら、時間はかかるものの、特に問題なし。スレッドを建ててから読み込めば良いんではないだろうか。

じゃぁ、オンメモリで作成した見たらどうか。
やってみた感じでは、メモリが許す限り、いくらでもでかい画像を作れる感じ。

private void button1_Click(object sender, RoutedEventArgs e)
{
    // 10000x10000の画像を作ってみる
    WriteableBitmap wb = new WriteableBitmap(10000, 10000);
    unchecked
    {
        int len = wb.Pixels.Length;
        for (int i = 0; i < len; i++)
        {
            wb.Pixels[i] = (int)0xff000000 + i; // ピクセルはARGB
        }
    }
    image1.Source = wb;
    image1.Width = wb.PixelWidth;
    image1.Height = wb.PixelHeight;
}

Silverlight 3のうれしいのは、WriteableBitmapが非常に使いやすいこと。基本、上位ビットから8ビットずつ、ARGBの順番で入っている。intなので(なんで、uintにしなかったの??)、アルファを代入しようとすると、必然的に、uncheckedブロックのお世話にならないといけないという点は問題ではあるけど、まぁ、大した問題じゃないでしょう。さらに、Disposableではないので、メモリ管理もGCにお任せにならざるを得ず、逆に言えば、そんなに神経をとがらせる必然性がないのも良いところと言えるでしょう。

unsafeが使えないので、スピードは気になるところではありますが、スピードの方もそんなに遅いわけでもないので、これで、C#お手軽画像処理のプラットフォームとして、Silverlight 3は大活躍できる土台ができあがったと言えるんじゃないでしょうか。