tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル印刷処理について
記事No1359
投稿日: 2005/02/02(Wed) 17:26
投稿者red
[OSのVer]:Windows2000  [VBのVer]:VB.NET  
お邪魔します。
印刷関係の処理なのですが
DrawImageの処理がすごく遅く
印刷に時間がかかってしまいます。
A4、1枚で1分くらいです。

e.Graphics.DrawImage(myImage, e.MarginBounds)
↑だけで30秒くらいかかってしまいます。


フォームから印刷ボタンを押して
printDocument1.print()
そこから
PrintDocument1_PrintPageに行く間にも
5秒くらいかかってしまいます。

元のイメージが600KBなのが加工を加えると10Mになってしまいます。
どうした良いでしょうか?

印刷処理を早くするコツ?
何かありましたアドバイスお願いいたします。
質問ばかりですみません。

[ツリー表示へ]
タイトルRe: 印刷処理について
記事No1360
投稿日: 2005/02/02(Wed) 22:48
投稿者花ちゃん
1.ファイルのサイズを小さくする
2.高速のプリンターを使用する

第一これだけの情報で何が答えられるのでしょうか?
たとえば同じファイルをExcel上から印刷するのと貴方のプログラムから
印刷するのでは処理速度に大きな違いがあるのですか?
何を持って遅いとおっしゃっているのですか?
単に印刷時間がかかるからといってプログラムだけに問題がある訳では
ないはずですよね。

[ツリー表示へ]
タイトルRe^2: 印刷処理について
記事No1361
投稿日: 2005/02/04(Fri) 10:18
投稿者red
花ちゃん返信ありがとうございます。

いつも、説明が下手で返信をして頂いた方に
迷惑をかけてすみません。

dim myGraphic as Graphics
dim myImage as Image
dim tmp_row as datarow

myImage= System.Drawing.Image.FromFile(Application.StartupPath & strPath)
myPicBox.Image = New Bitmap(tmpPaperW, tmpPaperH)
myGraphic = Graphics.FromImage(myPicBox.Image)

for each tmp_row in dataset.tables("pm").rows
    myGraphic.DrawLine(myPen, Convert.ToSingle(tmp_row.Item("pm3")), _
    Convert.ToSingle(tmp_row.Item("pm4")), _
    Convert.ToSingle(tmp_row.Item("pm5")), _
    Convert.ToSingle(tmp_row.Item("pm6")))
next

myGraphic.DrawImage(myImage, 5,10, (myImage.Width * 0.8), (myImage.Height * 0.8))

e.Graphics.DrawImage(myPicBox.Image, e.MarginBounds)

このような感じで書いているのですが、
600KBのイメージを読み込んで加工すると
プリンタ(レーザー)にたまるジョブのサイズが10MBになってしまいます。
その為、プリンタで1ページのドキュメントを作成するのに時間がかかり
出力に時間がかかってしまうのかなと思っています。

そこで、何とか加工された物を軽くして印刷処理を早くしたいと思ったのですが
どうした良いのか分からず、こちらに投稿させていただきました。
多分、まだ説明不足だと思いますが、
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: 印刷処理について
記事No1362
投稿日: 2005/02/04(Fri) 11:18
投稿者K.J.K.
これは、プリンタに非圧縮ビットマップを送っているので、
仕方が無いところがあるかも知れません。

まず、ビットマップを作成しそこに描画して、それを送る
という手順を見直しては。普通は、直接e.Graphicsに図形
や文字を描画しますよね。

勿論、プリンタドライバによっては圧縮したビットマップ
(やJPEG・PNG)をサポートしているものもありますが、それ
を使う場合はAPI関数で直接制御する必要がありますし。

[ツリー表示へ]
タイトルRe^2: 印刷処理について
記事No1366
投稿日: 2005/02/07(Mon) 11:31
投稿者red
[OSのVer]:Windows    [VBのVer]:VB.NET  
遅くなりましたが、
K.J.K.さん返信ありがとうございます。

> これは、プリンタに非圧縮ビットマップを送っているので、
> 仕方が無いところがあるかも知れません。
>
> まず、ビットマップを作成しそこに描画して、それを送る
> という手順を見直しては。普通は、直接e.Graphicsに図形
> や文字を描画しますよね。

なるほど、直接e.Graphicsに書き込む処理にしてみました。
明らかに速度が増しました。
ビットマップを作成し無いおかげで、サイズも減り
ストレスを感じない程度の速度になりました。

勉強不足を痛感しました。
本当にありがとうございました。

[ツリー表示へ]