VB6.0にて、
http://www.uploda.org/uporg898462.jpg
このようなものを作成しました。
折れ線グラフはプログラムにて後から描画したもの、
それ以外の目盛りなどは最初からピクチャボックスに描画してあるものです。
pic1,pic2は共にピクチャボックスです。
赤い線で囲まれたpic1を目盛り、グラフ、その他のテキストボックスや文字と共に画像として保存したいのですが、
SavePicture Pic1.Image, "C:\SaveTest2.bmp"
とすると、pic1の大きさの、何も描画されていない真っ白な画像が保存されてしまいます。
また、SavePicture Pic2.Image, "C:\SaveTest2.bmp" (pic2の保存)
とすると、折れ線グラフのみが描画され、目盛りは無くなった画像が保存されてしまいます。
2つのピクチャ共にAutoRedraw=Trueを設定しています。
pic1を上手く保存する方法は無いでしょうか?
ご教授、お願いします。
No.1ベストアンサー
- 回答日時:
ピクチャボックスのImageプロパティはピクチャボックスのグラフィックメソッド(Line,Circleなど)で描画されたものしか保持しません
WinAPIの Keybd_Eventを使って ALT+PrintScreenを送り
クリップボードにフォームのビットマップを送ります
このピットマップを 非表示のピクチャーボックスなどで受けて
該当部分を BitBltで 別のピクチャーボックスに送り
このImageプロパティを使って SavePictureを実行してみましょう
以下の例は Form2を Form1より少し大きめに作っておきます
Form1の Button1のイベントで ALT+PrintScreen を送信
Form2のPictureプロパティに設定しています
WinAPI BitBltの座標はピクセル単位なので
フォームのScaleModeが Twipなら Screen.TwipsPerPixelXまたはScreen.TwipsPerPixelYで除算してください
例
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Sub Command2_Click()
AppActivate "Form1"
Clipboard.Clear
' ALTを押す
keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY, 0
' PrintScreenを押す
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
' PrintScreenを離す
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
' ALTを離す
keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
Dim pic As StdPicture
Do
DoEvents
Do
DoEvents
'Debug.Print Clipboard.GetFormat(vbCFBitmap)
Loop Until Clipboard.GetFormat(vbCFBitmap)
On Error Resume Next
' クリップボードを開くのに失敗するときがあるため
' ループにしてあります
Set pic = Clipboard.GetData(vbCFBitmap)
On Error GoTo 0
Loop While pic Is Nothing
Form2.Picture = pic
Form2.Show
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) エクセル シート内のボックスを縦並びから横並びに 7 2023/04/05 04:28
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
- Windows 10 壁紙フォルダが表示されない 1 2022/11/16 21:58
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- PDF 画像調整してスクショし保存した画像を印刷する方法 1 2022/03/31 18:42
- 写真・ビデオ iphoneからPCへ写真をインポート、保存先がわかりません。 2 2022/09/29 02:06
- PDF 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 1 2022/03/31 19:09
- その他(IT・Webサービス) 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 3 2022/03/31 19:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
Bitmap画像の消去について
-
VC++ ドラッグしながらの図の...
-
OpenGLでのオブジェクトの描画上限
-
.net chartでの積層棒グラフの...
-
COLORREF color の反転色
-
C# DrawImage 物理サイズでな...
-
C# イベント登録(RowPostPaint...
-
Word 描画オブジェクトを削除...
-
ピクチャーボックスでの折線グ...
-
C#を用いて描画する四角形の角...
-
角が丸い長方形の描画
-
C#2005でExcelの図形描画のよう...
-
【Delphi】 Canvasへの描画につ...
-
C#でPictureBox内での図形移動...
-
DrawLineで引いた線が消えてし...
-
給紙トレイをダイアログを使わ...
-
c言語 ちらつき
-
水平線の描画
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
Word 描画オブジェクトを削除...
-
C#を用いて描画する四角形の角...
-
ビットマップに描画をしてピク...
-
PowerPoint の VBA
-
給紙トレイをダイアログを使わ...
-
win32api複数のタイマーを同時...
-
画面に絵を出す方法
-
MFCでのコンボボックスについて
-
.NETのPictureBoxでウインドウ...
-
scilabでのグラフ描画時の軸設定
-
Excel VBA:コントロールボタン...
-
VC;;6.0のMFCで線を簡単に引け...
-
花火のアルゴリズム
-
VB.NETでグラフィックを描くと...
-
水平線の描画
-
Excel 2007で、フリーフォーム描画
-
C# DrawImage 物理サイズでな...
-
円の頂点の求め方を知りたいです。
おすすめ情報