DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33327 / inTopicNo.1)  フォーム画面の保存
  
□投稿者/ 食う寝る走る 一般人(1回)-(2016/04/14(Thu) 10:36:44)
  • アイコン環境/言語:[Windows7(32bit)プロフェッショナル/VS2015 コミュニティ(VB.net)/.NET Framework4.6.1] 
    分類:[.NET] 

    開発環境
     OS:Windows7(32bit)プロフェッショナル
     IDE:VS2015 コミュニティ(VB.net)

    最大サイズにしたフォームでは、画面下にあるタスクバーに一部が隠れてしまいますが、隠れた画面部分も保存したく下記の「PrintWindow関数」を使った方法を利用したく思います。

    ttp://dobon.net/vb/dotnet/graphics/invokepaint.html

    実際、最大サイズにしなければ問題ないのですが、最大サイズにしてしまうと、
    キャプチャー画像の外側に太い黒い枠が出来てしまいます。

    (質問1)これを回避する方法は御座いますでしょうか?
    (質問2)保存形式はbmpですが、Jpgでも保存する場合どのようにしたら?

    よろしくお願いいたします。


    実行時にフォームにボタン1つを貼り付けてください。
    '-------------------------------------------------------------------------
    Public Class Form1
    <System.Runtime.InteropServices.DllImport("User32.dll")>
    Private Shared Function PrintWindow(ByVal hwnd As IntPtr,
    ByVal hDC As IntPtr, ByVal nFlags As Integer) As Boolean
    End Function

    ''' <summary>
    ''' コントロールのイメージを取得する
    ''' </summary>
    ''' <param name="ctrl">キャプチャするコントロール</param>
    ''' <returns>取得できたイメージ</returns>
    Public Function CaptureControl(ByVal ctrl As Control) As Bitmap
    Dim img As New Bitmap(ctrl.Width, ctrl.Height)
    Dim memg As Graphics = Graphics.FromImage(img)
    Dim dc As IntPtr = memg.GetHdc()
    PrintWindow(ctrl.Handle, dc, 0)
    memg.ReleaseHdc(dc)
    memg.Dispose()
    Return img
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object,
    ByVal e As System.EventArgs) Handles Button1.Click
    'コントロールの外観を描画するBitmapの作成
    Dim bmp As Bitmap = CaptureControl(Me)
    'キャプチャする
    bmp.Save("C:\PrintWindow.bmp")

    '後始末
    bmp.Dispose()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    'フォームを最大化
    Me.WindowState = FormWindowState.Maximized
    End Sub
    End Class
1296×1010 => 250×194
イメージ
PrintWindow.jpg
/37KB
引用返信 削除キー/
■33328 / inTopicNo.2)  Re[1]: フォーム画面の保存
□投稿者/ しま 一般人(16回)-(2016/04/14(Thu) 12:50:41)
  • アイコンNo33327に返信(食う寝る走るさんの記事)
    > 開発環境
    >  OS:Windows7(32bit)プロフェッショナル
    >  IDE:VS2015 コミュニティ(VB.net)
    >
    >
    > ttp://dobon.net/vb/dotnet/graphics/invokepaint.html
    >
    > (質問1)これを回避する方法は御座いますでしょうか?
    > (質問2)保存形式はbmpですが、Jpgでも保存する場合どのようにしたら?
    >
    質問2 に回答:以下を参照してください
    http://dobon.net/vb/dotnet/graphics/saveimage.html

引用返信 削除キー/
■33329 / inTopicNo.3)  Re[2]: フォーム画面の保存
□投稿者/ 食う寝る走る 一般人(2回)-(2016/04/14(Thu) 17:18:26)
  • アイコン2016/04/15(Fri) 14:56:39 編集(投稿者)

    No33328に返信(しまさんの記事)
    > 質問2 に回答:以下を参照してください
    > http://dobon.net/vb/dotnet/graphics/saveimage.html

    しま 様 アドバイスのように、修正したところ 解決いたしました。
    ご回答ありがとうございました。

    (修正前)bmp.Save("C:\PrintWindow.bmp")
    (修正後)bmp.Save("C:\PrintWindow.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)



    引き続き、質問1の太い黒い枠(写真)の回避策がございましたら、よろしくお願いいたします。
引用返信 削除キー/
■33330 / inTopicNo.4)  Re[3]: フォーム画面の保存【△解決】
□投稿者/ 食う寝る走る 一般人(4回)-(2016/04/15(Fri) 15:55:52)
  • アイコンNo33329に返信(食う寝る走るさんの記事)
    > 2016/04/15(Fri) 14:56:39 編集(投稿者)

    > 引き続き、質問1の太い黒い枠(写真)の回避策がございましたら、
    >よろしくお願いいたします。

    質問1に関して基本的な解決ではありませんが、
    用途目的は果たすので自己解決いたしました。


    Me.FormBorderStyle = FormBorderStyle.None
    にすると、黒枠の無いフォームの画像取得が可能(写真:分かりやすいようにバックグラウンドを青にしております)になります。

    ただし、フォームバーの無いフォームになり、右上にあるフォームのサイズ変更のボタンが消えてしまいます。仕方がないので、MenuStripオブジェクトを使い、同じ機能をするコードを作成いたしました。



    実行するに当たっては、以下のオブジェクトをフォームに貼り付けるともに、
    メニューバーの要素(?)をTEXTプロパティ項目で下のように追記して下さい。

    MenuStrip1の要素「メニューバー」
    MenuStrip2の要素「X」「□」「_」
    Button1


    納得行かない点もございますが、今回はこの方法で行くことと致します。

    皆様ご協力ありがとうございました。

    '-------------------------------------------------------------------------------
    Public Class Form1
    <System.Runtime.InteropServices.DllImport("User32.dll")>
    Private Shared Function PrintWindow(ByVal hwnd As IntPtr,
    ByVal hDC As IntPtr, ByVal nFlags As Integer) As Boolean
    End Function

    ''' <summary>
    ''' コントロールのイメージを取得する
    ''' </summary>
    ''' <param name="ctrl">キャプチャするコントロール</param>
    ''' <returns>取得できたイメージ</returns>
    Public Function CaptureControl(ByVal ctrl As Control) As Bitmap
    Dim img As New Bitmap(ctrl.Width, ctrl.Height)
    Dim memg As Graphics = Graphics.FromImage(img)
    Dim dc As IntPtr = memg.GetHdc()
    PrintWindow(ctrl.Handle, dc, 0)

    memg.ReleaseHdc(dc)
    memg.Dispose()
    Return img
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object,
    ByVal e As System.EventArgs) Handles Button1.Click
    'コントロールの外観を描画するBitmapの作成
    Dim bmp As Bitmap = CaptureControl(Me)
    'キャプチャする
    bmp.Save("C:\PrintWindow.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    bmp.Save("C:\PrintWindow.emf", System.Drawing.Imaging.ImageFormat.Emf)
    bmp.Save("C:\PrintWindow.exit", System.Drawing.Imaging.ImageFormat.Exif)
    bmp.Save("C:\PrintWindow.gif", System.Drawing.Imaging.ImageFormat.Gif)
    bmp.Save("C:\PrintWindow.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
    bmp.Save("C:\PrintWindow.png", System.Drawing.Imaging.ImageFormat.Png)
    bmp.Save("C:\PrintWindow.tif", System.Drawing.Imaging.ImageFormat.Tiff)
    bmp.Save("C:\PrintWindow.wmf", System.Drawing.Imaging.ImageFormat.Wmf)
    bmp.Save("C:\PrintWindow.mbmp", System.Drawing.Imaging.ImageFormat.MemoryBmp)

    '後始末
    bmp.Dispose()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    'フォームを最大化
    Me.WindowState = FormWindowState.Maximized
    Me.FormBorderStyle = FormBorderStyle.None 'フォームのボーダスタイルを無しに設定

    MenuStrip2.RightToLeft = RightToLeft.Yes
    MenuStrip2.BackColor = Color.PaleGoldenrod

    MenuStrip1.BackColor = Color.PaleGreen

    End Sub

    Private Sub ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click
    '閉じる[×]ボタン
    If MsgBoxResult.Yes = MsgBox("終了しますか?", MsgBoxStyle.YesNo) Then
    Me.Close()
    Else
    End If
    End Sub

    Private Sub ToolStripMenuItem4_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem4.Click
    '最大化[□]ボタン
    Me.WindowState = FormWindowState.Maximized '最大化
    End Sub

    Private Sub ToolStripMenuItem5_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem5.Click
    '最小化[_]ボタン
    Me.WindowState = FormWindowState.Minimized '最小化
    End Sub
    End Class

解決み!
650×1024 => 159×250
イメージ
1460703352.jpg
/87KB
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -