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

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

C# と VB.NET の入門サイト

Re[1]: 複数の画像を一枚にプレビュー


(過去ログ 119 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■70087 / inTopicNo.1)  複数の画像を一枚にプレビュー
  
□投稿者/ ポテポテ (1回)-(2014/02/24(Mon) 16:42:55)

分類:[VB.NET/VB2005 以降] 

お世話になってます。
Windows7でVB2008を使ってプログラミングしてます。

質問内容は複数の画像ファイル(jpg)のパスを取得し
一枚の用紙にプレビューしたいと思ってます。

'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'PrintDocumentオブジェクトの作成
Dim pd As New System.Drawing.Printing.PrintDocument
'PrintPageイベントハンドラの追加
AddHandler pd.PrintPage, AddressOf pd_PrintPage
'プレビューするPrintDocumentを設定
PrintPreviewControl1.Document = pd
'画面を更新する(.NET Framework 1.1以前では必要なし)
PrintPreviewControl1.InvalidatePreview()
End Sub

Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'画像を読み込む
Dim img As Image = Image.FromFile("test.jpg")
'画像を描画する
e.Graphics.DrawImage(img, 0, 0, img.Width, img.Height)
'次のページがないことを通知する
e.HasMorePages = False
'後始末をする
img.Dispose()
End Sub

にて一枚のプレビューはできるのですが
複数の画像パス取得と複数の画像をプレビューがうまくできません。
画像も複数ページになったときの処置もよくわかっていないのですが
なにかアドバイスいただけたらと思います。

引用返信 編集キー/
■70088 / inTopicNo.2)  Re[1]: 複数の画像を一枚にプレビュー
□投稿者/ shu (493回)-(2014/02/24(Mon) 17:27:35)
No70087 (ポテポテ さん) に返信

1ページ1枚ならこんな感じでどうでしょう。

(1) imglist as List(Of Image)をPrivateで用意
(2) pdのBeginPrintイベントでimglistに該当ファイルをすべてAdd
(3) 同イベントでimglistのcountをPrivate変数imgcnt As Integerに取得
(4) 同イベントでPrivate変数idx As Integerを0に初期化
(5) PrintPageイベントではimglist(idx)のイメージを処理、処理後idx += 1を行う。
(6) 同イベントの最後でidx<imgcntならe.HasMorePagesをTrueにしてそうでなければFalseにする。

2枚以上なら座標用変数をPrintPageイベント内で定義して描画毎に位置をずらしていくとよいです。
引用返信 編集キー/
■70091 / inTopicNo.3)  Re[1]: 複数の画像を一枚にプレビュー
□投稿者/ an (27回)-(2014/02/24(Mon) 18:06:48)
No70087 (ポテポテ さん) に返信


> 'Button1のClickイベントハンドラ
> 中略 
> にて一枚のプレビューはできるのですが

このソースコードはご自身で書かれたのでしょうか?
ご自身で書かれていればある程度他の応用は効きそうですが、
応用できないという事はどこかのサイト等から拝借したのでしょうか?
もしそうであれば、引用元を記載するのがマナーだと思います。

というか DOBON.NET さんのを丸写しのままですね・・・。



> 複数の画像パス取得と複数の画像をプレビューがうまくできません。
> 画像も複数ページになったときの処置もよくわかっていないのですが
> なにかアドバイスいただけたらと思います。

「うまくできません」とはどう「うまくできない」のでしょうか?
・コンパイルが通らない
 →どのようなエラー?
・実行したらエラーになる
 →どのようなエラー?
・エラーにはならないが思い通りにならない。
 →どう思っている?どうなってしまった?
こちらは曖昧な表現では理解できませんので・・・

アドバイスとしては、
まずはいきなり複数の事を行おうとせずに、
処理が単純になるように分割して考えることだと思います。

(1)複数の画像(ファイル)パス取得
(2)取得は別にして、複数の画像ファイルを提示したプログラムに設定してプレビューさせる。(出力位置に注意)
(3)etc・・・

また、まずは取得したサンプルコードをいじり倒してみるのも良いと思います。
数値なり値を変えるとどうなるのかとか試してみたり、
メソッドのヘルプを見てみたり。


とりあえず(1)は調べればすぐわかると思いますし、
(2)は分からないと言っていますので、(2)のサンプルを以下に記載します。

    Private Sub pd_PrintPage(ByVal sender As Object, _
            ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        '画像を読み込む 
        Dim img1 As Image = Image.FromFile("test.jpg")
        Dim img2 As Image = Image.FromFile("test2.jpg")
        '画像を描画する 
        e.Graphics.DrawImage(img1, 0, 0, img1.Width, img1.Height)
        e.Graphics.DrawImage(img2, img1.Width, img1.Height, img2.Width, img2.Height)
        '次のページがないことを通知する 
        e.HasMorePages = False
        '後始末をする 
        img1.Dispose()
        img2.Dispose()
    End Sub

これを実行すると元の画像の右下にもう一つ画像が表示されます。
(test2.jpgは準備してください。)


上記踏まえてもう少し詳しく質問してください。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -