はじめて書き込ませていただきます
ピクチャーボックスのhDCを
OpenGLを用いて描画するDLLに渡して、
VBのピクチャーボックス上に描画したところ、
ピクチャーボックス上には描画できているのですが、
SavePictureで保存しようとすると元の背景(灰色)だけ保存されてしまいます。
過去ログを拝見させて貰い、AutoRedrawをTrueにすれば良いのかなと思い、
試してみたところ、ピクチャーボックス上に描画されなくなり、
やはり背景だけ保存されてました。
このような場合、描画結果を保存するにはどのようにすればよいのでしょうか?
よろしくお願いします。
AutoRedrawをセットして描画後にピクチャーボックスのRefreshメソッド
を実行してみて。
で、SavePictureに渡すピクチャーはImageプロパティの方を使いましょう
あっきーさん、レスありがとうございます。
早速以下のように試してみました。
picSpace.AutoRedraw=True 'picSpace:ピクチャーボックス
Call Display 'DisplayでpicSpace.hDCをDLLに渡してます
picSpace.Refresh
SavePicture picSpace.Image,"test.bmp"
結果、やはりピクチャーボックス上に描画されなく、
背景だけ保存されてました。
あっきーさんのいった通りに上のコードは出来てるのでしょうか?
DLL側って、もしかしてオーバーレイで描画されているのかなぁ。
PictureBoxに描画した後に、PrtScreenで画面イメージを
クリップボードにコピーする事ができます?
それでコピーできるなら、Imageプロパティから取得できそうだけど、
PrintScreenで撮れないようだと、単純にはいかないかも。
NullPoさん レスありがとうございます。
AutoRedrawがFalse、Refreshはなしでピクチャボックス上に描画された場合は
WindowsのPrintScreenでコピー出来たと思います。ペイントに貼れましたから。
書き忘れてましたがWinXP,VB6.0です。
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の解析をしないと原因は分からないかもしれませんね。
がんばってください。
あっきーさん レスありがとうございます
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();
> DLLは私が本を参考にVC++で書いたものです(いかにも問題がありそうです)。
> ここで、DLLの中身について質問させて貰ってもよろしいでしょうか?
隣の [Visual C++ Q & A 掲示板]に行ってください。
Dentalさん 失礼しました。
隣の [Visual C++ Q & A 掲示板]へ行かせていただきます。
みなさん、アドバイス本当にありがとうございました。
ツイート | ![]() |