8年前いつもお世話になっております。今回はDXライブラリを使って作成中のゲームで、スクリーンショットを撮り、それをパズルのようにバラバラにしようと思ったのですが、どうしてもうまくいかなくて質問しました。プログラミングは趣味でやってる程度なので、DXライブラリやC++にはあまり詳しくないです。一応OSはwindows7、コンパイラはVC++の2008です。一部改変しましたが、ここまで作りました。プログラム全部だと膨大なので、一部だけ載せます。考え方としては、まずスクリーンショットを撮り、空のスクリーンを作ってマスクし、そこにスクリーンショットを描画してピースを取り出し、それを切り取って12個のハンドルに分けて12ピース作るというものです。あと少しのところまでいったのですが、画像を切り出すときにDerivationGraph関数を使ってもGetDrawScreenGraph関数を使っても、puzzlegraph[0]を描画したさいに本来透過されるべき部分が黒くなってしまいます。(透過フラグをFALSEにした場合。TRUEではそもそも描画すらされません)空のグラフィックから作ったはずなのになぜ黒くなってしまうのでしょう。コメント部が大量にあるのは、作ったけどうまくいかないから1つだけで試すために他を無効にしたからです。;DeleteMaskScreen();//DeleteGraph(screenshot);//DeleteGraph(sagyouba);}このやり方で果たしてできるのか、それとも他に簡単なやり方があるのか、わかる方がいらっしゃったら教えていただきたいです。それではよろしくお願いします。添付ファイル4つ目が添付できませんのでマスクを3つ添付します。出来ればコンパクトな再現コードを作ってもらうと調べ易いのでお願いします。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。再現コードはこちらです。透過フラグをTRUEにしてもFALSEにしても描画されてるので、TRUEにしたら見えないというのは別の原因があるようです。あれから色々試行錯誤してみたところ、どうもMakeScreen関数で作ったスクリーンに描画すると、はじめから黒く塗りつぶされているために透過しないのではないかと思います。そのため、今はDrawBlendGraph関数でどうにかできないか検討中です。;}それではよろしくお願いします。根本的な問題として、CreateMaskScreen()の戻り値を無視していませんか?失礼。=254で12回描画してあたかも個別の画像のように扱うことができました!一緒に悩んでいただいた皆さん、本当にありがとうございました。これはタイトル画面で使う予定なので問題ありませんが、大きな画像を12回描画したら処理が重そうですので、もっといいやり方があったら教えてただきたいです。それでは解決マークをつけさせていただきます。8年前>h2so5さん黒い色は、パズルのかけらを描画した際にもともとMakeScreen関数によるものと思われる黒い部分を無効にできないかと思って使ってみました。(透過されれば解決なので)追記:日本語変ですね。パズルのかけらにはもともとMakeScreen関数によるものと思われる黒い部分が一緒に描画されているので、それを無効にできないかと思いました。8年前たぶん、うまく行かないのはアルファ・チャンネルの関係だと予想は出来ましたが、DXライブラリのソースコードを追いかけないと分かりそうにないので追求は諦めました。DerivationGraph()の時にSetTransColor()の値が無視されていると思われます。高速に処理するには、最初にパズルパーツに分割しておくのが良いと思います。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。8年前>softyaさんご協力ありがとうございます。>一番高速に処理するには、最初にパズルパーツに分割しておくのが良いと思います。これはパズルパーツの画像を最初に用意しておいた方がいいということですよね?しかし、スクリーンショットをバラバラにするので、パズルの画像を容易するのが不可能なので、パズル型のマスクを使って試みた次第です。8年前DXライブラリでは取り込んだ画像のアルファ値が弄れないので自前でマスク合成するしかないですね。8年前>ISLeさん回答ありがとうございます。マスクも一緒にくりぬいて減算ブレンドということでしょうか。こんなやり方があるのですね。マスクも一緒にくりぬいて減算ブレンドということでしょうか。こんなやり方があるのですね。こんなやり方というかマスク合成としては王道的なやり方だと思います。パラメータをいじった応用コードを書いてみました。8年前この手法、パソコン系で昔は良く使いましたね。正確には昔の手法はAND・OR合成ですが。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。ミクプラは自由にリンクできます。