WP7.5アプリ作成の思い出とUWP化雑感

Windows Phone / Windows 10 Mobile Advent Calendar 2015の22日目です。

2015年は本当に、2014年時点では想像も出来なかったような展開になりました。2015年? どうせまた何も展開ないんでしょ……みたいな雰囲気も漂っていた1年前、まさかこんな怒濤の端末リリースが予想できたでしょうか。2015年早々にWP8.1端末開発が発表され、6月に発売されて、そして11月末からはW10M端末が続々と発売される……。イレギュラーな手法ながら世界最速でのW10Mアップグレードという恩恵を受けた我らがMADOSMAを日々使いつつ、au回線のため生き残り続けているIS12Tの処遇も考えながら、この年末を過ごしています。

とはいえ、IS12Tから救世主MADOSMAまで大分期間が空いたわけで、昔公開したWP7.5用のアプリが暫く放置されたままになっていて……。

これまでに5つのアプリを作成、公開しているものの、「超!A&G+プレイヤー」以外の4つはWP7.5 Silverlightアプリという状態。もちろん依然として動作はするわけだけれど、しかしもうW10M用にしてしまいたいというわけで、時間を見ておいおい置き換えていくつもり。どこぞの大社畜には遠く及ばないものの、それでもやはりWP7.5アプリを作っていた頃と比べるとまるで時間が無いので、果たしてどれだけかかるやら……。

とりあえずは手始めに自分が一番よく使うアプリでなおかつWP8以降ちょっと不便になってしまったPhotocessorをまずは直していきたい。

画像加工系のアプリはそれこそWP7.5の頃から結構あったのだけれど、何でまた自分でそれを作ったのかといえばあの頃のOSの仕様というか制限が関係していました。……WP7.5では、ImageやBitmapImageで縦横いずれかが2048pxを超える画像を読み込むと、勝手に縮小されてしまうという仕様があったのです。それが2048pxぴったりになるよう縮小されるならばまだよかったのですが、実際は2048px以下になるまで1/2縮小を繰り返すというものでした。

これがIS12Tのカメラが撮る画像サイズとは相性が悪く、縦横1/4、画素数にして1/16まで縮小されてしまうために、横向きで撮影した画像をロック画面に設定すると画面サイズの800×480をも下回ってボケボケになるという残念なことになっていました。

で、それを解消するためにあらかじめJPEG画像のバイナリを読み取って縦横サイズを取得し、そのサイズでWriteableBitmapを生成してそこに画像を読み込むという手法を使って縦横2048pxを超える画像でも縮小無しで加工できるというのを売りにしていました。

……まあ、今はそんなことしなくても良いんですけどね。

というわけでPhotocessorの個人的一番の売りがOSの進歩により今は昔の状態となってしまっているわけですが、そんなことは気にしない。UWP版、作っていきますよ。

WP7.5から変化したことといえば、あと大きなのは解像度。かつては800×480固定だったけど今や何でもあり。スケーリングも100%から300%まで幅広く、その関係でアイコンも昔は透過PNG画像(それも1解像度分)で矩形をマスクしていたものが今は外字領域にアイコンを設定した埋め込みフォントを使うのが主流のようで。InkscapeとFontForgeを使ってフォントを作ります。InkscapeでSVGを作成し、それをFontForgeで取り込んでフォントとして出力。FontForgeにはスクリプト機能があるのでそれによって自動で処理をさせると楽ちん。

photocessor-uwp

あとはまあ、VisualStateManagerを使って各サイズに合わせたレイアウトにするとか、WP7.5では無かったあれこれを。とはいえ複数画面サイズに対応させるなんてのはWebではごく当たり前にやることでもあるのである程度コツを掴めばそこまで大変でもないかな。完成するのがいつになるかはわからないけれど!

さてさて、翌23日のWindows Phone / Windows 10 Mobile Advent Calendar 2015は、Xamarinでお馴染みの@ytabuchiさんです。残すところあと3日ですよ。