トップページ > 過去ログ > 記事閲覧
描画した画面から新たにグラフィックハンドルを生成したい
名前:プチToTo 日時: 2007/12/26 15:19

デスクトップの背景画像を表示し、 その上に矩形で書いた額を描画、 さらにそのうえに読込んだ画像をリサイズして表示ししたにフォントを書込んでいます。 読込み対象のファイルはデジカメなどの写真を対象にしているため 非常にサイズが大きいく 額、リサイズ済み画像、フォントをひとつのにまとめ新たなグラフィックハンドルを生成し、 展開した画像ファイルは開放してしまいたいと思っています。 その際には 1.裏画面へ背景、額、画像、フォントを描画 2.MakeGraph()を使用してからのグラフィックハンドルを作成 3.GetDrawScreenGraph()にて描画領域から2.で生成したグラフィックへコピー という処理でよいのでしょうか。 GetDrawScreenGraph() は INITで設定した SetDrawScreen(DX_SCREEN_BACK) から 裏画面からデータをコピーするものと勝手に思っているのですが・・・ 現状落ちてしまうのはおばかさんな処理がどこかに残っているだけかもしれないので 上記手順でよいか、もしかほかにもっとよい処理があれば教えていただければと思います。 現状 ※x1:額 左上 x座標 ※x2:額 右下 x座標 ※y1:額 左上 y座標 ※y2:額 右下 y座標 //オブジェクト描画 DrawObject();※裏画面へ描画しています。 GHandle = MakeGraph(x2 - x1, y2 - y1); GetDrawScreenGraph(x1, y1, x2 + 1, y2 + 1, GHandle); //背景描画 ※現状はこの処理を実行した時点でLib内部で落ちてしまいます。 DrawExtendGraph( 0, 0, m_wSizeX, m_wSizeY, BackGround_GHandle, FALSE );

Page: 1 |

Re: 描画した画面から新たにグラフィックハンドルを生成した ( No.1 )
名前:プチToTo 日時:2007/12/26 15:29

うっ!過去ログをよくよくみてみると 裏画面に描画するのではなく 先にMakeGraph()で作成 SetDrawScreen()で描画先を変更 書いた後に読込んだ画像を開放すればよいって気がしてきました。 すみませんもうちょっと試してみます。 うまくいったら自己完結なので削除させていただきます。 すみません・・・
Re: 描画した画面から新たにグラフィックハンドルを生成した ( No.2 )
名前:プチToTo 日時:2007/12/26 15:34

失敗でした・・・ SetDrawScreenではMakeGpraphで作成したハンドルを指定することはできないんですね・・・
Re: 描画した画面から新たにグラフィックハンドルを生成したい ( No.3 )
名前:TNT 日時:2007/12/26 19:57

一応、MakeGraphで作成した領域を描画可能領域にすることもできます。 が、色々と制約がつく上に環境によっては正常に動かないということで、あまり使わない方が良いようです。 ちょっと意図を勘違いしている可能性もありますが、多分こんな方法で解決できるかと思います。 ・一旦、裏画面に合成したい画像を描画 ・裏画面をファイルとして保存し、素材を解放する ・保存したファイルをLoadGraphで再度読み込む つまり、ファイル化を経由して読み込みます。 リアルタイムで合成処理を行うのであれば重くて使い物になりませんが、 読み込み時に1回行うだけであれば十分かと思われます。
Re: 描画した画面から新たにグラフィックハンドルを生成した ( No.4 )
名前:プチToTo 日時:2007/12/26 21:50

TNTさんありがとうございます。 MakeGraphで描画可能領域にできるのですか・・・ でも危険となると・・・駄目ですね・・・ 壁紙の上に写真を張る感じのものを作っているので 裏画面に必ず背景となる壁紙が表示されている状態なのです。 なので領域の指定がうまくいかないと裏画面を保存する方法が取れないのです(;; GetDrawScreenGraph()を実行した後に 背景描画のためのDrawExtendGraph()を実行するとおちるので、GetDrawScreenGraph()の使い方がまずいと思うんですが・・・ もう少しがんばってみます。 TNTさんありがとうございますm(_ _)m
Re: 描画した画面から新たにグラフィックハンドルを生成したい ( No.5 )
名前:TNT 日時:2007/12/26 22:24

えーと、ちょっとボケてました(汗) 別にファイルとして保存しなくても、GetDrawScreenGraph()で十分なはずです。 ぱっと見た感じでは問題なさそうなのですが… 少し考えてみます。
Re: 描画した画面から新たにグラフィックハンドルを生成した ( No.6 )
名前:プチToTo 日時:2007/12/26 22:42

ありがとうございます やはりGetDrawScreenGraph()でいいんですか〜 実行後にはハンドラは作成されていたました。 多分他の管理領域の処理でメモリ破壊しちゃってるのかもしれません(^^; 背景描画の後にやる予定の生成したハンドラを使った描画で落ちていれば納得がいったのですが 関係ないはずの背景の描画で落ちていたので使い方が間違っているか、現アクティブ設定の裏画面からデータを取得する前に何かやらなくては・・・と 頭がぐちゃぐちゃになって質問させていただいていました。 TNTさんありがとうございます。 突貫工事の管理領域を中心に探って見ます。
Re: 描画した画面から新たにグラフィックハンドルを生成したい ( No.7 )
名前:かたぱると 日時:2007/12/27 17:46

失礼ながら素朴な突っ込みを…。 GetDrawScreenGraphの説明文に この際取りこむ画像のサイズと、取り込んだ画像を保存する グラフィックのサイズは同じでなければなりません とあるように GetDrawScreenGraphのサンプルの使い方は // 画面のサイズと同じサイズのグラフィックを作成 GHandle = MakeGraph( 640 , 480 ) ; // 画面データの取りこみ GetDrawScreenGraph( 0 , 0 , 640 , 480 , GHandle ) ; とあり、MakeGraphのサイズとGetDrawScreenGraphは同じになっています。 しかしながらプチToToさんの使い方は GHandle = MakeGraph(x2 - x1, y2 - y1); GetDrawScreenGraph(x1, y1, x2 + 1, y2 + 1, GHandle); となっており、 仮に x1:0 x2:640 y1:0 y2:480 とすると先ほどの式は GHandle = MakeGraph(640, 480); GetDrawScreenGraph(0, 0, 641, 481, GHandle); となってしまっているのでは?
Re: 描画した画面から新たにグラフィックハンドルを生成した ( No.8 )
名前:プチToTo 日時:2007/12/27 18:47

うっ! やっぱりそれですか・・・ 説明文を読んで足せばいいのかなと・・・ 今日は出先から戻れそうにないので明日試してみたいと思います。 かたぱるとさん また教えていただいてありがとうございます。 いただいたプログラムを見せていただいて。 すっかり三角関数を忘れている自分で驚きました(^^;
Re: 描画した画面から新たにグラフィックハンドルを生成した ( No.9 )
名前:プチToTo 日時:2007/12/28 12:57

かたぱるとさんのおっしゃるとおり、+1が原因でした。 たいへん申し訳ありませんでした。 TNTさん、かたぱるとさんありがとうございます。 裏画面を取得するとなぜか裏のWindowsの壁紙が取得されてしまったりしますが、 この辺はアプリの切替えのせいなのでしょう… だいぶ完成に近づけました。 ありがとうございました。

Page: 1 |