DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でPSD画像の各レイヤをPNG画像に変換する

環境/言語:[C#]
分類:[.NET]


現在、C#でPSD画像をレイヤごとのにPNG画像に変換するツールを作成しています。
下の参考サイトを参照してプログラムを組んだのですが、
実行すると「 Document psd = new Document(ファイルパス);」の部分で、

--------------
型 'System.Reflection.TargetInvocationException' のハンドルされていない例外が mscorlib.dll で発生しました
--------------
とエラーが発生しました。


そこで、ウオッチを使ってDocument(ファイルパス)の値を見てみると、以下の文が表示されました。(psdの値はnullでした)
-----------------
Document(ファイルパス) 'Endogine.Codecs.Photoshop.Document' は '型' ですが、'変数' のように使用されています。
-----------------


つきましては、この対象方法を教えてください。
できれば、具体的にどのようにすれば解決できるか教えて頂ければ幸いです。

よろしくお願いします。


--------------------------------------------------
参考サイト
--------------------------------------------------
PSD画像のレイヤーを一枚ずつPNGで保存する
http://www.studio-wiz.com/blog/2009/06/psdpng.html
--------------------------------------------------
No32523 の投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

●マルチポストされている場所
http://bbs.wankuma.com/index.cgi?mode=al2&namber=72893

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

●書き込みのルールについて
http://dobon.net/vb/bbs/index.html
すみません。
削除をお願いします。
■No32525に返信(ARIA さんの記事)
> すみません。
> 削除をお願いします。

いえ、指摘後の『削除』もルール違反にあたりますので、
指摘された「書き込みのルールについて」を再読願います。
http://dobon.net/vb/bbs/index.html#replypost

なお、ルールに則った上でのマルチポストは許可されています。

----------------

さて、本題。


> (psdの値はnullでした)

「new Document(ファイルパス);」が失敗している以上、そもそも
今回の Document のインスタンスは生成されていません。
インスタンスが生成されていない以上、それが変数 psd に
セットされているはずも無い(null のまま)ということです。


> ウオッチを使ってDocument(ファイルパス)の値を見てみると、以下の文が表示されました。
> Document(ファイルパス) 'Endogine.Codecs.Photoshop.Document' は '型' ですが、'変数' のように使用されています。

これは、指定した構文に問題があります。たとえば、
 Uri u = new Uri("http://dobon.net/");
に対してウォッチを仕掛ける場合、
 『new Uri("http://dobon.net/")』
ならば成功しますが、
 『Uri("http://dobon.net/")』
をウォッチさせた場合には、同種の文法エラーが報告されます。


では new を含めれば良いのか…というと、今回は new そのものが
失敗しているため、そもそもウォッチは使えないわけです。
たとえば上記で、「new Uri(null)」を渡した場合、ウォッチには
ArgumentNullException が報告されるだけですよね。


> 型 'System.Reflection.TargetInvocationException' のハンドルされていない例外が mscorlib.dll で発生しました
これだけでは情報不足です。下記にしたがって、InnterException を調査してみてください。
http://www.yaunix.com/2011/11/14/targetinvocationexception%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%96%B9%E6%B3%95/


今回の件に関しては、指定した psd が標準仕様に準拠していないのか、
あるいはライブラリ側に問題があるのか、質問内容からは判断できません。

第三者が検証できるよう、小さな psd を用意し、それを掲示板に添付するか
無料のクラウドサービス(OneDrive等)にアップしてみては如何でしょう。
この投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

●マルチポストされている場所
http://oshiete.goo.ne.jp/qa/8698741.html

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

●書き込みのルールについて
http://dobon.net/vb/bbs/index.html
以下の様にコードを変更したら、解決しました。
お騒がせしました。


foreach (XmlNode node in this._xmlInfo.SelectSingleNode("Layers").ChildNodes)
{

Image layer_img = layer.Bitmap;
Bitmap layer_bmp = new Bitmap(layer_img);

layer_bmp.Save(s.ToString() +"_"+ new_name + ".png"
, System.Drawing.Imaging.ImageFormat.Png);
      }
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板