Deep Zoom でポラロイド風に写真を配置

Silverlight on PHP を考えていて、何か良いサンプルはないかと探していたのですが、最近

Deep Zoom
http://msdn.microsoft.com/ja-jp/library/cc645050(VS.95).aspx
http://www.atmarkit.co.jp/fdotnet/special/deepzoom/deepzoom_01.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20080617/308438/

ってのを見つけました。
技術自体は、去年の夏(2008年8月頃)に発表になっていて、当時の Silverlight 2 で
話題になっていたのですが、今のところ鳴かず飛ばず(?)って感じの microsoft の技術です。

と、言うのも、画像をどんどん拡大できる、ってのは面白い技術なんでしょうが、これって、
google map と似たようなもので、だからどうなの? という気がしないでも無いわけで。
一体、何に使ったらよいのやら、って感じの代物なのです。実際、microsoft の公式サイトやブログでは、
silverlight 3 と deep zoom を絡めた記事はありません。

ですが、ちょっと考えてみるとですね。

Deep Zoom Composer
http://www.microsoft.com/downloads/details.aspx?FamilyID=457b17b7-52bf-4bda-87a3-fa8a4673f8bf&displaylang=en

<001>
20091112_01

というものがあって、結構簡単に、画面に写真が配置できます。
で、もう少し話を進めると、この deep zoom は、MultiScaleImage コントロールで扱えます。
MultiScaleImage コントロールは、.NET Framework 3.5 に入っているコントロールです。

そんな訳で、次なるサンプルページを考えてみたわけです。

<002>
20091112_02

よく flash や ajax でありますが、ポラロイド風に商品の写真が並べてあるページですね。
重なったところをクリックしたり、下の画像を見たりすることができます。web サイトの定番の画像です。
gif 画像の場合は、固定なので、クリッカブルマップにするしか方法はないのですが、今回は
silverlight and deep zoom で作るので、拡大縮小がスムーズにできます。deep zoom 自体、
マウスホイールに対応してるので(それ用のコードを吐き出すので)、なかなか面白い動きができます。

それで、早速 Deep Zoom Composer をダウンロードして作ってみようと思った訳ですが、
ありゃ、残念ながら Deep Zoom Composer は、斜めの画像に対応していないんですよね~。
縦横に配置することはできるのですが、画像を傾けるのは無理なんです。このあたり、仕様的に無理なのか、
実装的に難しいのか、よくわからないのですが、現状ではできません。

なので、断念、、、しては詰らないので、もう少し考えます。

deep zoom 自体は MultiScaleImage コントロール上で動いているので、普通の xaml のコントロールと
同じようにできます。ですから、MultiScaleImage コントロールの上に、普通に textbox や image(?)
のコントロールを貼り付けても行けるわけです。実際、textblock を重ねると、半透明やらなにやら、回転やら
ができます。なるほど!

そんな訳で、先の完成予想図を元に、サンプルプログラムを作成中です。
このサンプルは、

.NET ラボの11月の勉強会(11/21)
http://dn-lab.net/
http://www.atmarkit.co.jp/event/calendar/detail.php?event_id=25157
http://japan.internet.com/event/

で発表します。
# 「~ 時々 deep zoom」のところのサンプルですね。
# 実は、こっちに力を入れているという。

そんな訳で、ポラロイド風silveright(silverlight polaroid photo)を作る際の難点として、

・deep zoom の座標は、ViewportOrigin, ViewportWidth, AspectRatio を駆使して使う。
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.multiscaleimage.viewportorigin(VS.95).aspx
・マウスのクリックは、ElementToLogicalPoint メソッドで変換(0~1の間になる)
・子画像は、MultiScaleSubImage クラスで扱う

っていう、ちょっと複雑な事情があります。

回転関係が入るので、回転行列にも、お世話になります。
http://imagingsolution.blog107.fc2.com/blog-entry-151.html

そんな訳で、できがったら、ソースコードとか解説とかノウハウとかをアップしていきます。

カテゴリー: 開発 パーマリンク