問題タブ [getdibits]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - BitBlt でプログラム ウィンドウをキャプチャすると、常に同じ画像が返される
次のコード (C++ Win32) を作成して、ゲーム ウィンドウ画面をキャプチャし、画像からピクセル カラー配列を取得しました。関数 autoB() が仕事をします。
次に、結果の配列をウィンドウに描画して、何が得られたかを視覚的に確認します。
問題は、このプログラムがコンピューターを起動した後、最初にゲームから取得した最初のスクリーンショットを「キャッシュ」した後に一度だけ動作し、常に同じピクセル配列を取得することです。プログラムを閉じて再起動しても、同じスクリーンショットが表示されます。
ゲームは DirectX を使用して画面に描画することはなく、Alt+PrtSc を使用していつでもスクリーンショットを撮ることができます。
なぜこのように起こっているのかを理解するための助けをいただければ幸いです。
スクリーンショットを変更する唯一の方法は、ゲームを再起動することです。次に、最初のスクリーンショットがキャプチャされ、ゲーム ウィンドウで何が起こっているかに関係なく、何度も表示されます。
c - ppmの問題へのhwnd
hwndをppmファイルに保存する機能があります。この関数は、msdnの例に触発されています。msdnサンプルと私の関数の両方が機能しますが...問題があります...
しかし、最初に、ここに関数があります。
結果の画像は次のとおりです。
http://imageshack.us/photo/my-images/853/test2ne.jpg/
ご覧のとおり、幅のサイズに問題があります。たぶん窓の縁のせい?コード内の場合、「w=rc.right--rc.left;」を変更します。「w=rc.right --rc.left-10;」にすると、より良いです。しかし、なぜ「-10」を付けなければならないのかわかりません...画像の右側にいくつかのピクセルがありません(おそらく10ピクセル?)
http://imageshack.us/photo/my-images/207/test3jq.jpg
そして最後の質問:GetDIBits関数にバイトを逆の順序で配置するように依頼する方法はありますか?ピクセルごとにコピーするのは、CPU時間がかかるため、やりたくありません。(このファイルをディスクに保存しているので、CPU時間は気にしないでください。ただし、この画像をディスクに保存することは目標ではありません。デバッグ目的でのみ実行しています)
助けてくれてありがとう
c - ビットマップ反転色
少し前に、hwndをppmファイルに保存することについて質問しました。stackoverflowユーザーのおかげで、問題は解決しました。Iyは正しく機能しますが、まだ問題があります。赤と青の色が反転しています。
コードと私の前の質問はここにあります: hwnd to ppm issue
ビットマップ情報データは次のとおりです。
グーグルで検索したところ、問題はBI_RGBのようで、BI_BITFIELDSを使用する必要があります...しかし、使用方法に関するドキュメントが見つかりませんでした。また、青と赤の色を元に戻すために、すべてのデータをピクセルごとに読み取る必要はありません。ピクセルごとに実行せずにそれを実行する方法はありますか?
よろしくお願いします
c++ - GetDIBits() の使用に関する問題
GetDIBits() を使用する次のコードでは、目的の出力が得られません。
(gBit.bmp は、全体が白の 1366x768 ビットマップです。)
私は C++ が初めてで、この関数の使い方がほとんどわかりません。gBit のすべてのピクセルが白であるため、0 以上 3*1366 以下のすべての i に対して p[i] が 255 になることを期待していましたが、ランダムな値が表示されており、そのほとんどが 0 です。この機能を適切に使用していないのでしょうか、それともどこかで間違っていますか?
編集: GetDIBits() を含む行を削除すると同じ値が返されるため、GetDIBits() がピクセル データを p に保存できないようです。今回は DC に hBit を選択しませんでした。他に何が問題になる可能性がありますか?
c++ - GetDIBits を使用してビットマップをロードする
GetDIBits
C++ でビットマップをロードするために使用したいと考えています。私が使用しているコードは次のとおりです。
しかし、それbits
はNULL
何らかの理由があるようです。私のコードに何か問題がありますか? GetBitmapBits
以前は使っていましたが、そうでbits
はありませんでしNULL
た。
c++ - c++ GetDIBits() でピクセルを読み取る
Windows API GetPixel() 関数と同等の関数を作成しようとしていますが、画面のビットマップを作成してからそのバッファーを読み取りたいと考えています。
これは私が持っているものです (ほとんどの場合、Google 検索からコピーして貼り付けたものです)。実行すると、0 のみが出力されます。私はそれのほとんどを正しく理解していると思います。私の問題は、BYTE変数の読み方がわからないことです。
私の質問は、 for ループでランダムな色 (R、G、または B) を印刷するにはどうすればよいですか?
- ウィンドウズ7
- C::B 13.12 (コンソール アプリケーション)
- コンパイラ: mingw32-gcc
- ライブラリ gdi32 リンク
c++ - GetDIBits は、イメージ バッファをすべて 0 (すべて黒) に設定します。
ウィンドウのスクリーンショットをビットマップとして撮ろうとしています。以下のコードは適切なサイズのビットマップを作成していますが、すべてのピクセルが黒です。つまり、GetDIBits は imageBuffer をすべて 0 に設定しています。
投稿されたコードは、開いて画面に表示されるすべてのメモ帳のビットマップを保存します。どのアサートも失敗しません。
BITMAPFILEHEADER とファイルへの実際の書き込みは省略されます。これは、アサートを含む最後の for ループで、GetDIBits が imageBuffer をすべて 0 に設定していることを示しているため、それ以降のコードを調べる必要がないためです。
(実行可能ファイルのプロパティで、[構成プロパティ] -> [全般] の下で、Unicode の必要性を避けるために、文字セットを「設定しない」に設定しています。)
delphi - Win64 で GetDIBits の呼び出しが失敗するのはなぜですか?
32 ビットでは完全に動作する呼び出しがありGetDIBits
ますが、64 ビットでは失敗します。ハンドルの値は異なりますが、bitmapinfo
構造体の内容は同じです。
これは、エラーを再現するために思いついた最小の (少なくともわずかに構造化された) コード例です。Delphi 10 Seattle Update 1でテストしましたが、他の Delphi バージョンでもエラーが発生するようです。