いま吉里吉里のスクリプティング統合環境アプリケーションを作っています。
使用してるのは Visual C# 2005 です。(現在思ったより規模が大きくなってしまったので面倒くさがらずC++で開発初めていれば良かったと思っているのは内緒だ)
なるべく文字を打ち込まずにシナリオをスクリプト化できるようにする、というコンセプトのツールです。基本的にオレ専用だけど。
打ち込みツールを作るメリットは打ち込みの時間短縮とスクリプトバグの混入を防げるという点です。
さてそのためにはグラフィックをツール内部で扱うことがともかく必須項目ですね。
具体的には画像を表示するのにファイル名を指定したり表示位置の数値を入力するところで、サムネイルから画像を選べたりイメージをドラッグしてゲーム画面上での表示位置を決めたりと感覚的な打ち込みができます。
テキストで打ち込みをしたことがある人はこれができることがどれほど便利かわかると思います。
前フリ長かったですね。ここからが本題。
まずはPSDファイルの読み込みについて。イチからコーデックを書いてるとそれだけでプロジェクトが立ち上がってしまうので、ここはライブラリを利用。
まちみのな さんが PSD Parser を日本語化されていますので、ありがたく使わせていただきます。
落としてきたアーカイブに Psd.sln があるのでソリューションを開き、Endogine.Codecs.Photoshop をビルドします。
自分のツールに Endogine.dll と Endogine.Codecs.Photoshop.dll の参照設定を加えます。
で、以下PSDファイルの読み込みとレイヤーの走査。
layer_img に順番にレイヤーの画像が入るのでごにょごにょやります。
素晴らしすぎる。
さて、レイヤーが切り出せたのでこれをPNGファイルに保存します。
たとえばファイル名を [レイヤー名].png で保存するとすると以下のようになります。
実はオレPNGのファイル出力をするのに、まず外部ライブラリを探すところから始めてしまってはまりました。
や、PNGのファイルフォーマットの勉強になったので無駄ではないんだけどね。
2日もそれだけに費やしたので、一発でできることが判明したときは若干ヘコみましたな。
ちゃんと最初に確認しろよって話でした。
そんな感じです。
よしなに。
使用してるのは Visual C# 2005 です。(現在思ったより規模が大きくなってしまったので面倒くさがらずC++で開発初めていれば良かったと思っているのは内緒だ)
なるべく文字を打ち込まずにシナリオをスクリプト化できるようにする、というコンセプトのツールです。基本的にオレ専用だけど。
打ち込みツールを作るメリットは打ち込みの時間短縮とスクリプトバグの混入を防げるという点です。
さてそのためにはグラフィックをツール内部で扱うことがともかく必須項目ですね。
具体的には画像を表示するのにファイル名を指定したり表示位置の数値を入力するところで、サムネイルから画像を選べたりイメージをドラッグしてゲーム画面上での表示位置を決めたりと感覚的な打ち込みができます。
テキストで打ち込みをしたことがある人はこれができることがどれほど便利かわかると思います。
前フリ長かったですね。ここからが本題。
まずはPSDファイルの読み込みについて。イチからコーデックを書いてるとそれだけでプロジェクトが立ち上がってしまうので、ここはライブラリを利用。
まちみのな さんが PSD Parser を日本語化されていますので、ありがたく使わせていただきます。
落としてきたアーカイブに Psd.sln があるのでソリューションを開き、Endogine.Codecs.Photoshop をビルドします。
自分のツールに Endogine.dll と Endogine.Codecs.Photoshop.dll の参照設定を加えます。
で、以下PSDファイルの読み込みとレイヤーの走査。
using Endogine.Codecs.Photoshop; //ファイルの最初にこれね
......
//実際の処理
Document psd = new Document(FilePath);
foreach (Layer layer in psd.Layers)
{
Image layer_img = layer.Bitmap;
}
はい、これだけでできました。layer_img に順番にレイヤーの画像が入るのでごにょごにょやります。
素晴らしすぎる。
さて、レイヤーが切り出せたのでこれをPNGファイルに保存します。
たとえばファイル名を [レイヤー名].png で保存するとすると以下のようになります。
using Endogine.Codecs.Photoshop;
......
//実際の処理
Document psd = new Document(FilePath);
foreach (Layer layer in psd.Layers)
{
Image layer_img = layer.Bitmap;
//PNG出力
Bitmap layer_bmp = new Bitmap(layer_img);
layer_bmp.Save(layer.Name + ".png"
, System.Drawing.Imaging.ImageFormat.Png);
}
はい。簡単ですね。実はオレPNGのファイル出力をするのに、まず外部ライブラリを探すところから始めてしまってはまりました。
や、PNGのファイルフォーマットの勉強になったので無駄ではないんだけどね。
2日もそれだけに費やしたので、一発でできることが判明したときは若干ヘコみましたな。
ちゃんと最初に確認しろよって話でした。
そんな感じです。
よしなに。

コメントする