- - PR -
C#でPNGファイルを生データのまま印刷するには
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-09 14:05
初めて投稿させていただきます。
下記に関してご存知の方がいらっしゃいましたらご教授お願いします。 PNG形式の画像を印刷したいのですが、下記のソースではプリンタのジョブを見ていると転送されるデータ量を見ていると、BMPに変換したデータを転送しているように見えます。 private void prtDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { // イメージ取得 Image img = Image.FromFile(@"hoge.png"); // イメージ描画 e.Graphics.DrawImage(img, 0, 0, img.Size.Width, img.Size.Height); // 破棄 img.Dispose(); // 印刷終了 e.HasMorePages = false; } 仕様では、1つのジョブで100枚以上印刷する場合もあり、印刷をするのに時間がかかってしまい困っています。 転送データの増加の原因はImageオブジェクトがファイルを読込んだ時点で、BMP変換しているためだと思うのですが、もしかしたら見当違いかも知れません。 生データ(PNGデータ)のままプリンタにデータを転送することは出来ないのでしょうか? [環境]VS2003/WindowsXP(Pro) | ||||||||||||||||
|
投稿日時: 2006-05-09 14:18
きっと、PNGフォーマットのデータを受け取ったプリンターが、イメージを展開でき れば可能なんでしょうね。 実際、最近のプリンターって、そこまでできるんでしょうか? [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-05-09 14:19 ] | ||||||||||||||||
|
投稿日時: 2006-05-09 14:22
でしょうね。 ん〜きっと出来ないでしょうね。デバイスに依存しないためのデバイスコンテキストなのですから。 _________________ 囚人のジレンマな日々 | ||||||||||||||||
|
投稿日時: 2006-05-09 14:24
プリンタ側の都合を考えると、どのファイル形式だろうと同じだと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-05-09 14:27
生データのまま送っても画像としては表示されないでしょうねぇ。。 PNGは画像をファイルとして保管するときのフォーマットであって プリンタで画像を出力する際のフォーマットではありませんからね 取り扱えるのは生の画像のデータのみかと思います。 #そういうプリンタへの圧縮転送の方式とかあったら便利なのにねぇ | ||||||||||||||||
|
投稿日時: 2006-05-09 15:03
で、出遅れた(^^;
私の知る限りでは「PNGファイルフォーマット」を「画像イメージ」として直接扱える「ハードウェアデバイス」は存在していません(プリンタ以外も含めてね)。 まぁ、ドライバレベルまで入れてデバイスといってもいいのなら、対応してるのもあるでしょうけど...(^^; 残念ながらプリンタで PNG画像形式(フォーマットではないので注意!)を取り扱えるものって言うのは今のところ聞いてないですねぇ... で本題ですが、大量の印刷を行なうことを想定しているのであれば、まずは%TEMP%の存在するドライブの空き容量を大きくして、デフラグしてみてください。 これだけで大幅に機能改善する場合があります。 巨大な場合(たとえば、A1とかの大判)はこれでは解決できない場合もありますが... あと、ハード系の質問の場合は、該当するハードウェアも込みではじめて環境となります。特にプリンタは機種(メーカーが一緒かは関係なし)によっても、全く挙動が異なる場合があります。 また、ドライバのバージョンや、ハードウェアとしての出荷時期などによっても大きく仕組みが変わっている場合があります。 そのため、同一メーカーの同一機種でもドライバによってなんていうのもありますし、新旧となると殆ど比較の意味すらないというくらい違ってる場合もあります。 最近では、最廉価機種が底上げされているため同一系列なら機種による違いは少なくなりましたが、それでも解像度やインクの数などなどさまざまな影響箇所があります。 ・PNG画像形式の取り扱い問題について GDI(GDI+ではない)の扱う透過の概念の問題により、PNG画像として意図したとおりに表現されない場合があります。 これは、GDI の仕様からくる制約事項となるため、GDI+ では改善される場合がありますが、GDI+ は、画面出力以外の実装がないため、印刷の場合は GDI コマンドに変換されることになり、結果としてはうまくいきません。 Vistaでは、WPF(XPSってやつですね)を用いることにより GDI/GDI+ とは違う次元のデータを渡せるようになるため、状況が変わってくるかもしれません。 が 殆ど情報が流れていないので、どうなってるんだかさっぱりわかりません(^^; _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで | ||||||||||||||||
|
投稿日時: 2006-05-09 16:18
R・田中一郎さん・囚人さん・じゃんぬねっとさん・なせさん・とっちゃんさん
みなさん返信ありがとうございます。
そうですね。自分も出来ないなと思います。
本当にそう思います。圧縮転送の方式がISOなどで規格を作って欲しいですね。
とっちゃんさん、改善方法まで挙げてもらえてありがとうございます。ドライブをデフラグするだけで改善できるとは知れませんでした。 本来なら、別スレッドを立てるべきだと思うのですが、このまま質問させてもらいます。 C#からAPIの話になってしまうのですが、 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_stretchdibits.asp 上記のURLの説明では、 「コピー元イメージとして JPEG と PNG(Portable Network Graphics)の各イメージを渡せるよう拡張されました」 という一文を読んだ時は、APIを駆使すれば出来るのでは!?と淡い期待をしたのですが、この場合も、
との、ご指摘の観点から考えると生の画像のデータが転送されるということですよね? | ||||||||||||||||
|
投稿日時: 2006-05-09 16:39
「生の画像」というのを何を指して仰っているかが分かりませんが、多分そういう事です。 JPEG や PNG はあくまで「画像を圧縮したもの」であり「画像」ではりません。「画像」として扱うには展開しないといけません。 # 最近のプリンタはデジカメのカードを直に指して印刷できるから、ごにょごにょすればあるいは!? そうなると、デバイスコンテキストなんか使えないから、FTP みたいに、プリンタにファイルをアップロード…とか^^;。 _________________ 囚人@わんくま同盟 囚人のジレンマな日々 [ メッセージ編集済み 編集者: 囚人 編集日時 2006-05-09 16:43 ] |
1|2|3
次のページへ»