問題タブ [bitblt]

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.

0 投票する
2 に答える
2304 参照

c++ - Directx 11 Bitblt 代替

directx 11アプリケーションに統合しようとしている次の機能があります。directx9 を使用している場合はすべて正常に動作しますが、directx 11 に変換すると、Bitblt ラインでブルー スクリーン エラーが発生します (HDC で何か問題が発生しているに違いありません)。このコードを HDC ではなく、directx 11 と互換性のあるサーフェスに変換する最善の方法は何かと考えていました。

関数は次のとおりです。

この関数に渡す HDC は、次の方法で作成されます。

私が間違っていることのアイデアはありますか? Directx 9オブジェクトを使用してもブルースクリーンが発生しないのに、何が起こっているのか、なぜブルースクリーンが発生するのか理解できないようです。これを行うより良い方法はありますか?

(また、ドライバーを更新しようとしましたが、すべて最新です)。

お手伝いありがとう。

0 投票する
1 に答える
3690 参照

vb.net - VB.NET BitBlt ビットマップを画面にコピー

編集: 修正しました。グラフィックス オブジェクト用に compatibleDC を作成し、(b.gethbitmap を使用して) ビットマップ用のハンドルを作成し、GDI 内で SelectObject 関数を使用してこれら 2 つを選択し、BitBlt 関数で hDc の代わりに compatibleDC を使用しました。

画面 (デバイス 0) にビットマップを描画しようとしましたが、BitBlt を使用してグラフィックをコピーする際に問題が発生しました。

最初は、SetPixel (gdi32) を使用して直接デスクトップに描画していましたが、遅いので、現在はビットマップ オブジェクトのピクセルを設定し、そのオブジェクトからグラフィックを作成し、グラフィックの hdc を画面にコピーしています。

私の推測では、グラフィック オブジェクトの HDC を intptr に追加していると思います。これにより、基本的にグラフィック オブジェクトのコンテナーの HDC が得られますが、これは必要なものではありません。ただし、それでも、 BitBlt を使用する以外にビットマップをデバイスにコピーする方法に関する情報は見つかりませんでした。

これは私の現在のコードです (Windows フォーム アプリ、テキスト ボックス、ボタン) テキスト ボックスはコピー先のデバイスであり、ボタンはそれを開始します。テスト目的で、テキスト ボックスのテキストを 0 に設定し、ボタンを押します。画面の左上隅に黒いボックス (50x50px) が表示されます。正しく機能している場合、色は青になります。

それが機能する方法は、ボックス内のすべてのピクセル (私のコードでは 50x50) を反復するループ内から位置と色を指定して、関数 setpx を呼び出すことです。次に、setpx 関数は、ビットマップで setpixel 関数を呼び出します。この部分は正常に動作しています。

次に、ビットマップからグラフィック オブジェクト g を定義し、BitBlt を使用して g の hdc (g.gethdc) を画面にコピーします。これは正しく機能していません。これは正しい方法ですか?

0 投票する
2 に答える
27617 参照

c++ - ピクセルの色を最速で入手するには?

Windows アプリの自動クリッカーを作成しようとしています。それはうまく機能しますが、信じられないほど遅いです!私は現在、呼び出されるたびに配列をリロードするメソッド「getPixel」を使用しています。

これが私の現在のコードです:

基本的には、画面内のピクセル範囲をスキャンし、赤いボタンを検出するとマウス イベントを開始します。

bitblt など、ピクセルの色を取得する他の方法があることは知っています。しかし、私はいくつかの調査を行いましたが、カラー配列をスキャンするためにどのようにすればよいかわかりません。ボタンをキャッチするために、画面を非常に高速にスキャンするものが必要です。

手伝っていただけませんか?

ありがとう。

0 投票する
2 に答える
2504 参照

c++ - BitBlt でプログラム ウィンドウをキャプチャすると、常に同じ画像が返される

次のコード (C++ Win32) を作成して、ゲーム ウィンドウ画面をキャプチャし、画像からピクセル カラー配列を取得しました。関数 autoB() が仕事をします。

次に、結果の配列をウィンドウに描画して、何が得られたかを視覚的に確認します。

問題は、このプログラムがコンピューターを起動した後、最初にゲームから取得した最初のスクリーンショットを「キャッシュ」した後に一度だけ動作し、常に同じピクセル配列を取得することです。プログラムを閉じて再起動しても、同じスクリーンショットが表示されます。

ゲームは DirectX を使用して画面に描画することはなく、Alt+PrtSc を使用していつでもスクリーンショットを撮ることができます。

なぜこのように起こっているのかを理解するための助けをいただければ幸いです。

スクリーンショットを変更する唯一の方法は、ゲームを再起動することです。次に、最初のスクリーンショットがキャプチャされ、ゲーム ウィンドウで何が起こっているかに関係なく、何度も表示されます。

0 投票する
1 に答える
1140 参照

c++ - Bitblt、createdibsection、画像が破損して出てきます

こんにちは、スクリーンショットをキャプチャしようとしていますが、画像が破損しています。コードのどこが間違っているかを誰かが確認できます。基本的に、createdibsectionを使用して、ビットに直接アクセスできるようにしています。

結果の画像は次のようになります http://oi47.tinypic.com/33c4zko.jpg

それがコードです、そして私はこれを使って画面をキャプチャします

0 投票する
1 に答える
649 参照

c++ - BitBlt は特定の条件下でデータの一部のみをコピーします

これは奇妙な問題です。私は BitBlt 関数のドキュメントを読みましたが、ほとんどの場合問題なく動作しますが、オフセットが大きいソース四角形からデータをコピーしようとすると失敗し始めます (一部のみ、またはまったくコピーされません)。目的地のサイズよりも大きい...奇妙な?? 以下にいくつかのサンプルを示します。

これは私が使用するコードであり、結果は渡すパラメーターによって異なります。ビットマップの幅m_iTileAreaWidth + 2 * m_iTileAreaMarginと高さはm_iTileAreaHeight + 2 * m_iTileAreaMargin

m_iTileAreaMargin600m_iTileAreaWidthm_iTileAreaHeightが両方とも200の場合、ソース領域の130pxがコピーされます

m_iTileAreaMargin500m_iTileAreaWidthm_iTileAreaHeightが両方とも200 の場合、完全なソースがコピーされます

m_iTileAreaMargin800m_iTileAreaWidthm_iTileAreaHeightが両方とも200 の場合、ソース領域はコピーされません

このコードを使用すると、領域全体が生成されると確信しています。

次に、生成された領域全体が表示されます

このような単純な機能でなぜこのような問題が発生するのか、誰にも分かりますか?

0 投票する
0 に答える
409 参照

c++ - BitBlt がハングするのはなぜですか?

お気に入りのゲームのスクリーンショットを自動的に撮る C++ コードを書いています。私のコードの一部は次のようになります。

次のように、関連する変数を以前に初期化しました。

明確な理由はありませんが、コードは BitBlt 関数で何かが更新されるまでハングします (ただし、何が更新されるかはわかりません)。ゲーム内のボタンをクリックするか、ゲーム外のウィンドウをクリックするミリ秒単位で、BitBlt が終了し、残りのコードが問題なく実行されます。不思議なことに、私は最近この問題に出くわしただけです。それは今までになかった。さらに不思議なことに、それは私のラップトップでのみ発生し、友人のラップトップでは発生しません. 何が起こっている可能性がありますか?

0 投票する
1 に答える
388 参照

python - Python/GTK でのブロック ピクセル シフト

Python 2.6 と gtk+ (Centos 6.3 による) を使用して、横スクロール テキスト ボックス (「ティッカー テープ」表示) を作成したいと考えています。

テキスト文字列を受け取り、印刷ウィンドウのオフセットをインクリメントしながら繰り返し印刷するタイマー駆動のルーチンを作成しました。それは機能しますが、私が望むよりもプロセッサを少し集中的に使用しているようです。

文字列をインクリメントするオフセットで完全かつ繰り返し印刷するのではなく、ブロック移動アクセラレーションを何らかの方法で使用し、ほとんどの GPU でハードウェアを「ブリッティング」することで利益を得る方法はありますか? 文字列を何らかのタイプのピクセルバッファに出力してから、関連する部分をスクリーンメモリに「ブリット」できるかどうか疑問に思っていましたか? コメントや経験をいただければ幸いです。

私のターゲット ハードウェアは Intel 945GME ベースです。

0 投票する
1 に答える
606 参照

linux - Linuxでデスクトップ画面をキャプチャしてウィンドウに描画する方法

私はLinuxを初めて使用し、WindowsプログラムをLinuxに移植する必要があり、次の点でサポートが必要です。

  1. 画面をキャプチャする必要があります。
  2. 画面全体をカバーする境界線とタイトルのないウィンドウを作成する必要があります。
  3. そのウィンドウにキャプチャ画面を描画する必要があります。
  4. XX%の不透明度でウィンドウ上に黒い画像をアルファブレンドする必要があります。

これはすべて、WindowsのGetDC(NULL)、BitBlt()、およびAlphaBlend()を使用して簡単に実行できました。

Linuxは、このような単純なプログラムを実行する場合、非常に難しいように見えます。