- - PR -
printdocumentからimageを作る方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-19 19:33
半日くらい格闘してみました。 が、C#は初めてなので大苦戦中ですorz 動き的にはtodoさんの紹介してくださったソースがドンピシャなので、C#覚えるところからはじめてます。(なんとなくはわかるのですけれどねぇ・・) | ||||||||||||
|
投稿日時: 2006-01-19 21:16
自己レスです。
http://www.codeproject.com/vb/net/Bitblt_wrapper_class.asp を見ていたら
だそうです。他所を見ても『&HCC0020』となっている物もあるので、これでためしてみました。 さらに
は TargetBitMap.Save("\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp) のようにFormatを指定したらバッチリでした。 でも、出来上がってきたのは大きさの正しい真っ黒なbitmap....orz うーん。 | ||||||||||||
|
投稿日時: 2006-01-19 22:28
e.Graphic.Clear(System.Drawing.Color.White) した後だとどうなりますか? その後に、DrawString してみたりなどして、少し試してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-01-19 22:47
きちんと真っ白になりました。 drawstringしてみても、ちゃんと文字が出力されます。 ・・・・じゃあプリントされるはずの物はどこ行ったんだろう? printdocumentの呼び出し元から PrintPreviewControl1.Document = PrintDocument1 //→printpreviewcontrolです で確認していたのですけれど、真っ黒が出力されている時は previewcontrolにはちゃんと出力されて欲しい物が表示されていました。 で、今回塗りつぶしたり、字を書いたりしてみるとbitmapと同じ物が表示されています。 e(System.Drawing.Printing.PrintPageEventArgs) を上書しちゃったのでそうなったと思うのですけれど、じゃあ今までは何で真っ黒だったんだろう・・・ もしかしてgraphicが出力される前にファイルに保存しちゃっているとかいう事なんでしょうか? で、さらにプレビューをスクロールさせてみると、出力されて欲しい物がチラチラと見えていたりします。 うーん。 | ||||||||||||
|
投稿日時: 2006-01-20 00:20
Graphicsの単位(Unit)をそろえる必要があるかも。
e.Graphicsのほうが大きくて左上のほうだけが転送されているんじゃないでしょうか。 | ||||||||||||
|
投稿日時: 2006-01-20 01:12
それで思い出したのですが、Image の PixelFormat は合わせる必要はないんでしょうか? どうやって、NSSPRNXA.DLL が Draw しているかわかんないですけど... # 色の指定が文字列なのが、ちょっと笑えました。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-01-20 09:33
:現状 Dim rect As Rectangle = e.PageBounds Dim TargetBitMap As New Bitmap(rect.Width, rect.Height) //もしくはこうとか //Dim TargetBitMap As New Bitmap(rect.Width, rect.Height, e.Graphics) BitBlt(TargetDCPtr, 0, 0, rect.Width, rect.Height, _ SourceDCPtr, 0, 0, &HCC0020) こんな感じで幅と高さだけは併せたつもりだったんですけれど、単位はちょっと考えて無かったです。今からちょっと調べてみます。 ただ、現状出て来る真っ黒のbitmapの大きさだけは、printpreviewの倍率1倍で描画した物を出力した時と同じ(printpreviewからだとグレーの外枠を省いた大きさ)で出力されています。空bitmapを定義する所までは良くって、その後の書き込みでコケていると言う事は、BitBltのところを調べる訳ですよね。(vb6の資料が多いのに.netになるとほとんどないorz) | ||||||||||||
|
投稿日時: 2006-01-20 14:30
印刷が正常に動作しているPrintPageイベントで試しましたが
真っ黒になりました(; ;/ GetWindowDC APIで取得したDCからビットマップを作成するという方法でウィンドウキャプチャしてるんですが Graphics.GetHdcだと何か違いがあるのか。。。 実のところGDIには疎いので、こもってごにょごにょしてみます。 |