none
アイコンを印刷できない RRS feed

  • 質問

  • PrintPageEventArgs e を使って
    e.Graphics.DrawImage(); でビットマップファイルを表示し
    e.Graphics.DrawIcon();でアイコンを表示し、
    e.Graphics.DrawString();で文字を表示しています。
    この状態でプリントプレビューを行うと、ビットマップとアイコンと文字の全てが表示されるのですが、
    プリンタに印刷すると、ビットマップと文字だけが印刷され、アイコンが印刷されません。
    プリントプレビューには表示されるのに印刷できない原因が何か考えられるでしょうか。

     

    2008年9月10日 0:54

回答

  • System.Drawing.Iconクラスのヘルプ
    http://msdn.microsoft.com/ja-jp/library/system.drawing.icon.aspx
    を見てみると、
    アイコンは透明なビットマップと考えることもできますが
    とあります。

    印刷用に別途見た目がアイコンと同じ画像を用意した方が早いかもしれません。

    2008年9月10日 1:48
  • >Graphics.DrawImage(Icon1.ToBitmap(), Rect);
    >とすると、印刷できました。
    やはり一度ビットマップ化(印刷できるイメージに明確に変化)させないと印刷に出ないのですね。

    >
    これって、C#2005 のバグでしょうか。
    「C#の」というより、「.NET Frameworkの」だと思います。
    はっきりと「バグかどうか」といったことはわかりませんが、
    少なくとも今回問題になっているメソッドは.NET Frameworkのモノなので。

    2008年9月10日 6:33
  • 外池と申します。バグと言うよりも、ドキュメントの不備と言った方が良いかもしれませんね。

     

    考えてみれば、アイコンはピクセルの集合体として表現されているもので、ディスプレイ表示のピクセルとアイコンのピクセルが1対1対応していることが基本かと。で、そのままの対応でプリンターに出力したら、ものすごく小さなものになっちゃいますよね。今回ご指摘のRectで印刷の仕上がりサイズを指定するなら大丈夫のハズじゃないか、ということになりますが、まぁ、プリンター向けの実装ができていなかった、というオチかも?(推測に過ぎません)

     

    ところで、Icon.ToBitmapメソッドのドキュメントの記述に「アイコンの透明な領域はビットマップに変換されるときに失われ、結果のビットマップの透明色は RGB(13,11,12) に設定されます。」とありますが、これも奇妙です・・・。ARGBの4つの要素すべてがゼロになるようなのですが。こちらも、ドキュメント改善で報告すべきですかね。

     

    2008年9月16日 6:33

すべての返信

  • System.Drawing.Iconクラスのヘルプ
    http://msdn.microsoft.com/ja-jp/library/system.drawing.icon.aspx
    を見てみると、
    アイコンは透明なビットマップと考えることもできますが
    とあります。

    印刷用に別途見た目がアイコンと同じ画像を用意した方が早いかもしれません。

    2008年9月10日 1:48
  • Graphics.DrawIcon(Icon1, Rect);
    の代わりに

    Graphics.DrawImage(Icon1.ToBitmap(), Rect);
    とすると、印刷できました。

    これって、C#2005 のバグでしょうか。

    2008年9月10日 1:57
  • >Graphics.DrawImage(Icon1.ToBitmap(), Rect);
    >とすると、印刷できました。
    やはり一度ビットマップ化(印刷できるイメージに明確に変化)させないと印刷に出ないのですね。

    >
    これって、C#2005 のバグでしょうか。
    「C#の」というより、「.NET Frameworkの」だと思います。
    はっきりと「バグかどうか」といったことはわかりませんが、
    少なくとも今回問題になっているメソッドは.NET Frameworkのモノなので。

    2008年9月10日 6:33
  • 外池と申します。バグと言うよりも、ドキュメントの不備と言った方が良いかもしれませんね。

     

    考えてみれば、アイコンはピクセルの集合体として表現されているもので、ディスプレイ表示のピクセルとアイコンのピクセルが1対1対応していることが基本かと。で、そのままの対応でプリンターに出力したら、ものすごく小さなものになっちゃいますよね。今回ご指摘のRectで印刷の仕上がりサイズを指定するなら大丈夫のハズじゃないか、ということになりますが、まぁ、プリンター向けの実装ができていなかった、というオチかも?(推測に過ぎません)

     

    ところで、Icon.ToBitmapメソッドのドキュメントの記述に「アイコンの透明な領域はビットマップに変換されるときに失われ、結果のビットマップの透明色は RGB(13,11,12) に設定されます。」とありますが、これも奇妙です・・・。ARGBの4つの要素すべてがゼロになるようなのですが。こちらも、ドキュメント改善で報告すべきですかね。

     

    2008年9月16日 6:33
  • こんにちは。中川俊輔 です。

     

    カドルドエグさん、外池さん、回答ありがとうございます。

     

    兼田さん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、

    勝手ながらカドルドエグさん、外池さんの回答へ回答済みチェックをつけさせていただきました。

     

    また、ドキュメントに不備等ありましたら、ご面倒等は思いますが

    Visual Studioドキュメントフィードバックフォーラムへ投稿をしてください。

     

    今後もフォーラムをよろしくお願いします。

    それでは!

    2008年10月6日 8:24
  • もう一つ、DrawIcon の問題を見つけました。
    DrawIcon で画面にIcon の表示を繰り返していると、段々CPU使用率が上がって行き、最後は100%になってしまいます。
    DrawIcon ではなく DrawImage を使えばそんな現象は起きません。

     

    2008年10月24日 8:16
  • 外池と申します。

     

    せっかくですから、新しいスレッドで問題提起されるとよろしいかと思います。

    可能ならば、ソースもつけて頂けると、皆さんの参考になるかと。

     

    2008年10月24日 9:14