C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.8903 の関連記事表示

<< 0 >>
■8903  埋め込まれたリソースを読み出してファイルに書く
□投稿者/ asuka -(2007/10/12(Fri) 20:08:01)

    分類:[C#] 

    お世話になっております。

    test.icoファイルをリソースで保持し、プロパティを『埋め込まれたリソース』にしております。

    これを読み出してファイルに書くことで、正規のファイルを作成したいのですが、

    自分のやり方では間違っているようです。




    // 現在のコードを実行しているアセンブリを取得
    System.Reflection.Assembly asm =
    System.Reflection.Assembly.GetExecutingAssembly();

    // ビットマップとして読込み
    Bitmap bmp = new Bitmap(asm.GetManifestResourceStream("ProjectTest.test.ico"));

    // ファイルに書く
    System.IO.StreamWriter sW =
    new System.IO.StreamWriter(new System.IO.FileStream"C:\\iconB1.ico", System.IO.FileMode.CreateNew));
    sW.Write(bmp);
    sW.Close();



    ファイルは作成されるのですが、テキストで『System.Drawing』と1行書かれているだけでした。

    一応本当にファイルが埋め込まれているのか、以下のソースでデバッグしてみました。

    // デバッグ:埋め込まれたリソース列挙
    System.Reflection.Assembly asm =
    System.Reflection.Assembly.GetExecutingAssembly();
    //Assembyl asm = System.Reflection.Assembly.GetCallingAssembly();
    //Assembly asm = GetType().Assembly;

    string[] resNames = asm.GetManifestResourceNames();
    StringBuilder sb = new StringBuilder(resNames.GetUpperBound(0));
    foreach (string resName in resNames)
    {
    sb.AppendFormat("{0}\r\n", resName);
    }
    MessageBox.Show(sb.ToString());



    結果、System.Reflection.Assembly.GetExecutingAssembly();で取得したものが、

    メッセージボックスに表示され、test.icoは存在しておりましたので、

    書出しの部分がまずいのかと思っております。



    ピクチャーボックスですと、ピクチャーボックスに表示出来るもの、

    たとえば、jpgにしろ、gifにしろicoにしろ、BITMAPオブジェクトで取得して表示出来たのですが、

    ファイルの書出しは出来ないようでした。

    ファイルの書出しを成功させるにはどのように処理すればよいのか、教えて頂ければ幸いです。


親記事 /過去ログ21より / 関連記事表示
削除チェック/

■8904  Re[1]: 埋め込まれたリソースを読み出してファイルに書く
□投稿者/ なちゃ -(2007/10/12(Fri) 20:13:18)
    Bitmapつくる必要なんてないのでは?
    ストリームから読み出しつつそのまま書き込めばいいでしょう。
記事No.8903 のレス /過去ログ21より / 関連記事表示
削除チェック/

■8905  Re[1]: 埋め込まれたリソースを読み出してファイルに書く
□投稿者/ IIJIMAS -(2007/10/12(Fri) 20:15:48)
    No8903 (asuka さん) に返信
    > ピクチャーボックスですと、ピクチャーボックスに表示出来るもの、
    >
    > たとえば、jpgにしろ、gifにしろicoにしろ、BITMAPオブジェクトで取得して表示出来たのですが、
    >
    > ファイルの書出しは出来ないようでした。

    Bitmapの保存は
    Image.Save メソッド (String, ImageFormat)
    http://msdn2.microsoft.com/ja-jp/library/9t4syfhh(VS.80).aspx
    をご使用ください。

    StreamWriterはテキストファイルを作成するときに使います。
記事No.8903 のレス /過去ログ21より / 関連記事表示
削除チェック/

■8912  Re[2]: 埋め込まれたリソースを読み出してファイルに書く
□投稿者/ asuka -(2007/10/13(Sat) 14:00:49)
    レスありがとうございます。

    結果から申し上げますと成功致しました。

    一応成功したソース(2パターン)を記載しておきます。(何方かにお役になれば)



    // ■考察2 - 成功
    System.Reflection.Assembly asm =
    System.Reflection.Assembly.GetExecutingAssembly();

    System.IO.Stream s =
    asm.GetManifestResourceStream("Test.image.iconB1.ico");

    FileStream writer = new FileStream(m_strPathInstallDir + "image\\iconB1.ico", FileMode.Create, FileAccess.Write );

    int nbyte;
    while ((nbyte = s.ReadByte()) != -1)
    {
    writer.WriteByte((byte)nbyte);
    }
    writer.Close();
    s.Close();



    // ■考察3
    // リソースからストリーム作成
    System.Reflection.Assembly asm =
    System.Reflection.Assembly.GetExecutingAssembly();
    Stream sIcon = asm.GetManifestResourceStream("TestP.image.iconB1.ico");

    // ファイル作成
    BinaryReader read = new BinaryReader(sIcon);
    FileStream fs =
    new FileStream(m_strPathInstallDir + "image\\iconB1.ico", FileMode.Create);
    BinaryWriter write = new BinaryWriter(fs);

    // ストリームから読出してファイルに書込み
    byte[] bt = new byte[sIcon.Length];
    sIcon.Read(bt, 0, bt.Length);
    write.Write(bt);

    // クローズ
    sIcon.Close();
    read.Close();
    write.Close();
    fs.Close();



    とりあえずバイナリファイルなので、■考察3で実装することにしました。

    速度を計ってはいませんが、1バイトづつ読書きするよりかは早いかと・・・




    予断ですが、

    ■考察1
    System.Reflection.Assembly asm =
    System.Reflection.Assembly.GetExecutingAssembly();
    System.IO.Stream s =
    asm.GetManifestResourceStream("TestP.image.iconB1.ico");

    Bitmap bmp =
    new Bitmap(asm.GetManifestResourceStream("TestP.image.iconB1.ico"));

    bmp.Save(m_strPathInstallDir + "image\\iconB1.ico", System.Drawing.Imaging.ImageFormat.Icon);



    というのも作ってみまして、実行したところ、アイコンファイルが出来るのですが、

    アイコンファイルはディレクトリの一覧で目で見たときに、既にそのアイコンが表示されるはずですが、何故かシステムの不明なアイコンが表示されていました。

    クリックしてビューアで見てみますと、意図したアイコンが表示されるのですが、

    中身は元のバイナリと違っておりました。

    ■考察1だと何が悪いのか分からないのですが、お分かりでしたら教えて頂けると幸いです。
記事No.8903 のレス / END /過去ログ21より / 関連記事表示
削除チェック/

■8916  Re[3]: 埋め込まれたリソースを読み出してファイルに書く
□投稿者/ IIJIMAS -(2007/10/13(Sat) 15:47:34)
    No8912 (asuka さん) に返信
    > というのも作ってみまして、実行したところ、アイコンファイルが出来るのですが、
    >
    > アイコンファイルはディレクトリの一覧で目で見たときに、既にそのアイコンが表示されるはずですが、何故かシステムの不明なアイコンが表示されていました。
    >
    > クリックしてビューアで見てみますと、意図したアイコンが表示されるのですが、
    >
    > 中身は元のバイナリと違っておりました。
    >
    > ■考察1だと何が悪いのか分からないのですが、お分かりでしたら教えて頂けると幸いです。

    ごめんなさい、image.Saveはicoファイルで保存できない問題があるんでした…orz
    (icoじゃないですが昔ハマったことありました…orz、なおってなかったのね。。。)
    出力されたファイルはたぶんpng形式になっています。(バイナリの最初がPNGになってませんか。)

    DOBONさんのサイト
    画像フォーマットを指定して保存する
    http://dobon.net/vb/dotnet/graphics/saveimage.html
    の記述をご確認ください。
記事No.8903 のレス / END /過去ログ21より / 関連記事表示
削除チェック/

■8919  Re[4]: 埋め込まれたリソースを読み出してファイルに書く
□投稿者/ asuka -(2007/10/13(Sat) 16:26:21)
    IIJIMASさん

    おお、そうだったんですか☆

    それならメンバにIconとか入れないで欲しいですよね。^^

    まぁ、使わせて頂いていると思っているので、仕方ないかで僕の場合済むんですけど、

    疑問点が晴れてすっきりしました。

    ありがとうございます。
記事No.8903 のレス /過去ログ21より / 関連記事表示
削除チェック/

■8920  Re[5]: 埋め込まれたリソースを読み出してファイルに書く
□投稿者/ asuka -(2007/10/13(Sat) 16:27:07)
    『解決』マークが消えてしまったので再送します。

    すいません、、、
記事No.8903 のレス / END /過去ログ21より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -