描画結果を保存するには?

解決


えす  2006-02-08 06:49:33  No: 130150

はじめて書き込ませていただきます
ピクチャーボックスのhDCを
OpenGLを用いて描画するDLLに渡して、
VBのピクチャーボックス上に描画したところ、
ピクチャーボックス上には描画できているのですが、
SavePictureで保存しようとすると元の背景(灰色)だけ保存されてしまいます。
過去ログを拝見させて貰い、AutoRedrawをTrueにすれば良いのかなと思い、
試してみたところ、ピクチャーボックス上に描画されなくなり、
やはり背景だけ保存されてました。
このような場合、描画結果を保存するにはどのようにすればよいのでしょうか?
よろしくお願いします。


あっきー  2006-02-08 09:29:23  No: 130151

AutoRedrawをセットして描画後にピクチャーボックスのRefreshメソッド
を実行してみて。
で、SavePictureに渡すピクチャーはImageプロパティの方を使いましょう


えす  2006-02-09 01:37:19  No: 130152

あっきーさん、レスありがとうございます。
早速以下のように試してみました。

picSpace.AutoRedraw=True     'picSpace:ピクチャーボックス
Call Display                 'DisplayでpicSpace.hDCをDLLに渡してます
picSpace.Refresh
SavePicture picSpace.Image,"test.bmp"

結果、やはりピクチャーボックス上に描画されなく、
背景だけ保存されてました。

あっきーさんのいった通りに上のコードは出来てるのでしょうか?


NullPo  2006-02-09 02:11:12  No: 130153

DLL側って、もしかしてオーバーレイで描画されているのかなぁ。

PictureBoxに描画した後に、PrtScreenで画面イメージを
クリップボードにコピーする事ができます?
それでコピーできるなら、Imageプロパティから取得できそうだけど、
PrintScreenで撮れないようだと、単純にはいかないかも。


えす  2006-02-09 02:30:08  No: 130154

NullPoさん レスありがとうございます。

AutoRedrawがFalse、Refreshはなしでピクチャボックス上に描画された場合は
WindowsのPrintScreenでコピー出来たと思います。ペイントに貼れましたから。

書き忘れてましたがWinXP,VB6.0です。


あっきー  2006-02-09 05:16:15  No: 130155

picSpace.AutoRedraw=True     'picSpace:ピクチャーボックス
'Call Display                 'DisplayでpicSpace.hDCをDLLに渡してます
picSpace.Line(0,0)-(picSpace.ScaleWidth,picSpace.ScaleHeight)
picSpace.Refresh
SavePicture picSpace.Image,"test.bmp"

と書き直して実行してみてください。
Pictureボックスの絵がファイルに保存されているはずです。

となると、DLLの解析をしないと原因は分からないかもしれませんね。
がんばってください。


えす  2006-02-09 06:26:06  No: 130156

あっきーさん レスありがとうございます

picSpace.Line(0,0)-(picSpace.ScaleWidth,picSpace.ScaleHeight)

で描いた絵は保存されてました。

DLLの方に問題がありそうとのことですが、
DLLは私が本を参考にVC++で書いたものです(いかにも問題がありそうです)。
ここで、DLLの中身について質問させて貰ってもよろしいでしょうか?

中身は以下のようにC言語なんですが

中略
_declspec(dllexport) void _stdcall DrawSpace(HDC hDC,ーー略ーー)

myInit(hDC);

(略)

glBegin(GL_POLYGON);

glEnd();


Dental  2006-02-09 06:47:51  No: 130157

> DLLは私が本を参考にVC++で書いたものです(いかにも問題がありそうです)。
> ここで、DLLの中身について質問させて貰ってもよろしいでしょうか?

隣の [Visual C++ Q & A 掲示板]に行ってください。


えす  2006-02-09 06:52:53  No: 130158

Dentalさん 失礼しました。
隣の [Visual C++ Q & A 掲示板]へ行かせていただきます。

みなさん、アドバイス本当にありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加