- ベストアンサー
SavePictureで保存できない
VB6での開発で ピクチャボックス(大)の中にピクチャボックス(小)を何個か入れ 全てのピクチャイメージを保存したいのですが「SavePicture ピクチャボックス(大), ファイル名」 を実行してもピクチャボックス(大)のみしか保存できません。 すべてのピクチャにAutoRedraw=Trueを設定しています。 どなたか分かる方がいらっしゃいましたら教えてください。 宜しくお願いします。
- takuyachiko
- お礼率64% (27/42)
- Visual Basic
- 回答数6
- ありがとう数4
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ループの中の .Picture3.Picture = LoadPicture(wkAry(i)) に続いて .Picture3.Line (50, 50)-(2400, 150), , BF ですよね? 問題ないままに動いております。 こちらではエラーが出ておりません。 Command1_Clickイベントを張っておきます。 ----------------------------------------------------- Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long の宣言をした上で ----------------------------------------------------- Private Sub Command1_Click() Dim wkAry As Variant Dim i As Long Dim lngCntPic As Long '絵の情報 wkAry = Array( _ "C:\windows\しゃくなげ.bmp" _ , "C:\windows\グリーン ストーン.bmp" _ , "C:\windows\サポテック織り.bmp" _ , "C:\windows\サンタフェ.bmp" _ , "C:\windows\シャボン.bmp" _ ) 'ピクチャの数 lngCntPic = UBound(wkAry) + 1 'スクロールピクチャの高さ取得 lngScrollPicH = (lngCntPic + 1) * lngPicH With Me .Command1.Enabled = False .Command2.Enabled = True With .Picture1 .Visible = True End With With .Picture2 .Visible = True .Width = lngPicW .Height = lngScrollPicH .Left = 0 .Top = lngPicH - lngScrollPicH End With For i = 0 To lngCntPic - 1 .Picture3.Picture = LoadPicture(wkAry(i)) .Picture3.Line (50, 50)-(2400, 150), , BF 'イメージを取得したいので、ペイントピクチャは使用しない 'Call .Picture2.PaintPicture(.Picture3.Picture, 0, (lngCntPic - i) * lngPicH, lngPicW, lngPicH, 0, 0, .Picture3.ScaleWidth, .Picture3.ScaleHeight, vbSrcCopy) 'イメージを取得したいので、ストレッチぶりっとを使用する Call StretchBlt(.Picture2.hdc, 0, (lngCntPic - i) * lngPicH, lngPicW, lngPicH, Picture3.hdc, 0, 0, .Picture3.ScaleWidth, .Picture3.ScaleHeight, vbSrcCopy) If i = 0 Then 'Call .Picture2.PaintPicture(.Picture3.Picture, 0, 0, lngPicW, lngPicH, 0, 0, .Picture3.ScaleWidth, .Picture3.ScaleHeight, vbSrcCopy) Call StretchBlt(.Picture2.hdc, 0, 0, lngPicW, lngPicH, Picture3.hdc, 0, 0, .Picture3.ScaleWidth, .Picture3.ScaleHeight, vbSrcCopy) End If Next i End With End Sub
その他の回答 (5)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>'.Picture3.Picture = LoadPicture(wkAry(i)) >上記文はコメント(')にしています。 であればなおの事、#5のStretchBltを利用したサンプルでできませんか?
補足
週末にやってみたのですが やはりできませんでした。 もう少し時間をかけてやってみます。 また連絡します。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
文章だけでは、どのようにやって、なぜ実現できていないかがわかりません。 コードの抜粋を公開してみてください。
補足
先ほど教えていただいたサンプルソース http://okweb.jp/kotaeru.php3?q=167464の この一行を変えただけです。 '.Picture3.Picture = LoadPicture(wkAry(i)) .Picture3.Line (50, 50)-(2400, 150), , BF 「ピクチャが不正です」とエラーが発生します。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
すいません。 #1の後者の方では実験していませんが、前者の方で、保存できちゃいましたよー 私はWinXPなので、初期設定のビットマップ群のパスを C:\Winnt⇒C:\Windows に変更して、コマンドボタン3を追加し、 SavePicture Picture2.Image, "c:\aaa.bmp" としただけです。 後者の流用でできないのは、AutoRedrawのプロパティが違うのでは?
お礼
回答ありがとうございました。 ピクチャ2(子)に画像を取り込むとうまくいきましたが ピクチャ2(子)にLineで線を描きそれを ピクチャ1(親)にペイントしようとするとエラーで 戻ってきます。 ピクチャ2(子)の属性(?)をピクチャ1(親)に渡すにはやはり別の方法でないとだめなのでしょうか?
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
すんません。 日中はVB6がない場所に来ているので、実例でのアドバイスは困難ですー ExcelVBAではPictureBoxが無いので、擬似的に答えることもできませんですー 帰宅後にサンプルをアップしますねー
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
Picture親の中に Picture子1 Picture子2 ・・・ Picture子n があり、Picture親.SvaePictureで子のピクチャを含めて保存したいということですよね? Picture親の中の子達は、親のサイズ内に全て表示されていますか? ※親の枠をはみ出た位置に配置された子が存在しているのであれば、親に直接描画するしかないと思います。 http://okweb.jp/kotaeru.php3?q=167464 のようにPicture2のサイズを広げ、複数の画像をPicture2に転送して保存する方法が考えられます。 ※親の枠をはみ出た位置に配置された子が存在していないのであれば、そのPicure親のイメージを、他のピクチャボックスに転送して、保存したらいいと思います。 http://www.geocities.jp/h_sakusaku/ の「VBサンプル」の「8.画面のスナップ」
補足
>Picture親の中に >Picture子1 >Picture子2 >・・・ >Picture子n >があり、Picture親.SvaePictureで子のピクチャを含め>て保存したいということですよね? そうです。 Picture親の中の子達は、親のサイズ内に全て表示されています。 後者のサンプルを使ってやったのですが 出来ませんでした。(泣) 新たにピクチャボックス(Picture親2)を用意し StretchBlt()APIを使って Picture親の内容をPicture親2にコピーし SavePicture .Picture親2.Image, strSaveFileName で保存してみたのですが やっぱりPicture子nがコピーされずにPicture親の画像のみが保存されました。 どこが悪いのでしょうか?
関連するQ&A
- ピクチャボックスに描画した画像の保存
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を上手く保存する方法は無いでしょうか? ご教授、お願いします。
- ベストアンサー
- Visual Basic
- Pictureコントロールの画像の書き出し
VB6において、PictureClipコントロールから切り出した画像を、Pictureコントロールにクリップし、更にその上にLineコマンドで線を描画しました。 その画像をSavePictureコマンドで、ファイルへ書き出したのですが、クリップした画像のみ書き出され、描画した内容が保存されません。 PictureコントロールのAutoRedrawプロパティはTrueにしてあります。 他に何か設定等が必要でしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- ピクチャーボックス上に描いた円をうまく保存できません
1.予めピクチャーボックスに画像を表示しておき 2.そのピクチャーボックス内に円を描き↓ Picture1.Circle (10, 10), 500 3.それら両方(1で予め表示しておいた画像と、2で描いた円)を保存しようと↓ SavePicture Picture1.Image, App.Path & "\Test.bmp" とすると、1で予め表示しておいた画像だけが保存され、2で描いた円が保存されません。 両方とも(1で予め表示しておいた画像の上に2で描いた円が表示されるように)保存したいのですが、どのようにすればよいでしょうか。 できれば具体的にサンプルコードなどをご教授いただけると大変ありがたく存じます。 恐れ入りますが、何卒よろしくお願いいたします(VB6.0)
- ベストアンサー
- Visual Basic
- 保存について教えて!!
pictureboxに編集したグラフィックを表示することはできたのですが、保存することができません。 SavePicture Picture1.picture,"c:\***.bmp"のように書いたのですが保存できません… 上ので出来なかったのは多分SavePictureステートメントはBMPファイルのみをサポートしているためだと思います。編集後のグラフィックはBMPファイルではないから保存ができないと思うんですが、BMPファイルじゃなくても保存できる方法あったら是非是非教えて下さい★
- ベストアンサー
- Visual Basic
- SavePicture
ひさしぶりに質問します。 以前にVBフォームのピクチャーボックスに画像を貼り 保存するやり方を教えて頂いたHUKAHIREですが、 Windows Update等をしていたらSavePictureって.NETで 仕様変更されたんですか? 良く分からないんですけど動かなくなっちゃったんです。 なので VBフォームのピクチャーボックス、もしくはVBから 起動したエクセル内のグラフを画像として保存できる 方法を教えて下さい。 宜しくお願いしますっ。
- ベストアンサー
- Visual Basic
- ピクチャーボックスやイメージに表示し、画像を保存する時に画像を移動させて保存する方法を教えて下さい。
開発環境はVB6.0です。 イメージに表示させた画像を保存する方法は Private Sub Command2_Click() 'Picture1.Refresh Call SavePicture(Image1, "z:\meibo\a\1.jpg") End Sub ですが、この場合イメージに表示させた画像は元の場所にあるままなので、保存場所は違いますが、同じ絵の画像が2枚になります。 そうならないように画像を移動させる方法を探しています。 ご存知の方いらっしゃいましたらよろしくお願いします。
- 締切済み
- Visual Basic
- 画像の一部を保存したい
Picture1にある画像の一部(X1,Y1)-(X2,Y2)の範囲をファイルに保存したいのですがどうすればよいでしょうか。 Picture2.PaintPicture Picture1, 0, 0, , , X1, Y1, X2 - X1, Y2 - Y1 で画像の一部を一旦表示させてみたものの、 SavePicture Picture2.image, "save.bmp" では保存できません。 よい方法を教えてください。
- ベストアンサー
- Visual Basic
- ピクチャーボックスやイメージに表示せずに画像を保存する方法を教えて下さい。
開発環境はVB6.0です。 説明べたなので箇条書きで記入しました。 (1)ボタンを押す (2)Dドライブの中にあるJPGファイル(複数)をZドライブにコピー(もしくは移動) コピーでも移動でもどちらでもかまいませんが、なんせ異なったドライブにJPGファイルを写す方法を探しています。 VB上に画像を表示して保存する方法はわかりましたが、 Call SavePicture(Image1, "z:\meibo\a\1.jpg") これでは一気に保存することが出来ないのでとても困っています。 どなたか教えて下さい。よろしくお願いします。
- 締切済み
- Visual Basic
- PictureBoxにPSetしてそれをImageへ
VBに関して経験の浅い者です。 今、タイトル通り、ピクチャーボックスオブジェクト(名前はPict1とする)に、 Pict1.PSet(i,j),color(適当な数) と言うコードを実行していって描画し、 画像を作ったとします。 それで、Pict1にそうして描いて表示されている画像を イメージオブジェクト(名前はImageとする)に送って表示させたいのですが、 方法が分かりません。 Image.[何か]=Pict1.[ナンか]とすれば良さそうだと言う検討を立ててみたの ですが、こんな風にプロパティの色々で解決できますでしょうか? あと、イメージオブジェクトの説明に、「「AutoRedraw」を有効にしておくと フォームやピクチャーボックスが変更された時にそれが即複写される」とあったの ですが、例えば上のPict1の描写を反映させるにはどうすればいいのでしょう? Imageに入力する以上はAutoRedrawのターゲット(?に相当する概念)を設定する 必要があると思うのですが、、、
- ベストアンサー
- Visual Basic
- 同じ画像が3枚ずつ保存されてしまいます
ネットで拾ってきた画像や、sdカードから保存した画像が、3枚ずつ保存されてしまいます。 ピクチャライブラリ内で、並び替えを「フォルダー」にしていた時には、1枚ずつしか表示されないので、気づきませんでしたが、 「日」や「評価」にすると、三枚ずつ保存されていることが分かります。 タイトルには同じ画像が3枚、と書きましたがファイルサイズはそれぞれ異なります。(大、中、小といった感じで) 1枚ずつ画像を保存するにはどうしたら良いでしょうか? よろしくお願いします。 ちなみに使用しているのはvaioです。
- 締切済み
- Windows 7
補足
何度も回答ありがとうございますm(__)m '.Picture3.Picture = LoadPicture(wkAry(i)) 上記文はコメント(')にしています。