C#のアプリからAndroid 9-patch形式の画像を扱うクラスを書いてみたよ
クラスファイルはこちら。
https://github.com/aquarla/CSharp-NinePatch-Sample/blob/master/NinePatchSample/NinePatch.cs
Android 9-patchってなに?
Androidの各種UI部品に使用されている画像フォーマットです。
UI部品が拡大されたときに「どのピクセルを引き伸ばすか」の情報が画像内に含まれている為、UI部品のサイズが可変になる場合でも、見た目が崩れることなく描画することが出来るようになります。
こんな感じ。
などと説明すると、とても高尚なものに聞こえますが、
というだけのものです。
詳しくはここを読む。
http://developer.android.com/guide/developing/tools/draw9patch.html
日本語が良ければこちらを参考に。
9patchを覚えよう! - 明日の鍵
どうやって使うの?
簡単な使い方
NinePatch ninePatch = new NinePatch(image); // 9-patch画像imageから9-patchオブジェクトを作成 Image newImage = ninePatch.ImageSizeOf(500, 500) // 500x500に引き伸ばした画像を取得
ボタンの背景画像に指定する
protected override void OnResize(EventArgs e) { button1.BackgroundImage = ninePatch.ImageSizeOf(button1.Width, button1.Height); base.OnResize(e); }
ボタンのサイズが変更された時にはImageを再設定してやる必要があるので、FormのOnResizeなどに書く必要あり。
また、ButtonのFlatStyleはFlat、BackgroundImageLayoutはStretchとかに指定してやると、わりと幸せになれる。
サンプルとかある?
こちらをどうぞ。
GitHub - aquarla/CSharp-NinePatch-Sample: Sample for using Android 9-patch format image in C#
Visual Studio 2008 Professional を使ってますが、形式を変換すれば2010とかでも動くはずです。たぶん。