問題タブ [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 投票する
1 に答える
1299 参照

c - BitBltを使用してデスクトップピクセルの色をキャプチャする

現在、GetPixel()を使用して、デスクトップから約64ピクセルを取得し、それらの色を取得しています。GetPixel()が遅いことについて読みましたが、数ピクセルでは問題ないと思いましたが、ルーチンを実行するたびに1.5秒ほどかかります。いくつかの調査を行った後、bitbltは私が探しているもののようだと結論付けました。私がやりたいのは、デスクトップの定義された領域(すべてのウィンドウを含む)を取得してから、指定されたオフセットでピクセルの色を取得することです。これが私が今していることです:

}

かなりの量のチュートリアルとドキュメントを見つけましたが、Windows APIに慣れていないため、あまり効果がありません。ありがとう!

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

gdi+ - GDI +ビットマップに直接BitBltすることは可能ですか?

HBITMAPからGDI+ビットマップにBitBltを実行しようとしています。私はこれを試しましたが、何も起こりません:

編集:どうやら、hDCを取得して、後でBitBltで使用すると、hDCが機能しないようです。hDCがまだ有効であることを確認する必要がありました。これが解決策です:

この変更が必要な理由を誰かが知っていますか?最初の例のように以前に取得したhDCを使用しても機能しないのはなぜですか?

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

winapi - GDI +ビットマップから直接BitBltを実行することは可能ですか?

GetHBitmapを使用せずにBitBltを使用してGDI+ビットマップから直接コピーすることは可能ですか?

GetHBitmapは、BitBltコピーに加えて、画像全体の新しいコピーを作成するため低速であり、指定されたHBITMAPを破棄する必要があります。画像が大きいです。

元のGDI+画像のピクセルデータを使用するようにBitBltを指定する方法はありますか?

編集: GDI+ビットマップピクセルデータがメモリ内のどこにあるかへのポインタを取得できます。余分なコピーを回避するためにGDI+ビットマップピクセルデータを指すHBITMAPを作成し、そこからBitBltを作成できますか?

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

c# - 子コントロールを画面に描画せずに bitblt に子コントロールをコピーさせるにはどうすればよいですか?

ここに私の質問の要約があります:カスタム コントロールで、親がその子コントロールを背景画像にペイント/bitblt する方法はありますか?

詳細: (コンパクト フレームワークで) 独自のダブル バッファリングを実行しようとしていますが、多くの問題が発生しています。かなり複雑なユーザー コントロールがあります。PanelスクロールPanel(可変サイズ)のあるビュー(固定サイズ)があります。巻物Panelには数枚のカードPanelsが入っています。カードパネルは縦に重ねて2枚DataGridsと2枚入っていLabelsます。

これが私のコントロールの視覚的な概要です

では、問題に移ります。スクロール パネルのオン ペイントをオーバーライドし、bitblt を実行して画像を「カスタム ペインティング」として表示します。画像を保存してテストしましたが、まさに私が望んでいるものです。

問題は、データグリッドとラベルがまだ通常の描画を行っていることです。そのため、スクロールするとアーティファクトが残ります。そこで、OnPaint をオーバーライドして、グリッドとラベルに対して何もしないようにします。しかし、それを行うと、bitblt はもうグリッドをピックアップしません (しかし、奇妙なことに、まだラベルをピックアップしています)。

では、カスタム コントロールで、子コントロールを背景画像に親ペイント/bitblt する方法はありますが、子コントロールが実際にコントロールをペイントする方法はありますか?

注: 私の完全なコードに興味がある場合は、ここで見ることができます。

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

c# - BitBtl と DWM の問題 (Windows Aero)

フルスクリーン ゲームのスクリーンショットを撮る必要があるアプリケーションを開発しています。問題は、私は多くの方法を試しましたが、ゲームがフルスクリーン モードのときにいずれの方法でもスクリーンショットを撮ることができることです。

フッキングを伴わないこの目標を達成するための代替手段はありますか? 私は C# を使用していますが、これはこの種のものを作成するには一種の悪い言語です。

これは今私のコードです:

これは XP では適切に動作しますが、Vista / 7 になると、このコードが機能するために Aero を無効にする必要があります。

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

c - SelectObject および BitBlt 関数を使用してスクリーンショットがウィンドウに描画されないのはなぜですか?

画面の 0x0 (左上) の位置から 500x500 のスクリーンショットを取得して、ウィンドウに配置しようとしています。

これが私のコードです(hwnd私のウィンドウハンドルです):

ここで何が欠けていますか?スクリーン キャプチャではなく、ウィンドウ内が黒くなります。

編集

以前はに変更memoryDcした後は機能 しますが、問題は SelectObject が機能していないことです。つまり、イメージを HBITMAP に配置していないということです。ただし、BitBlt はからコピーしていますdcBitBlt(appDc, 0, 0, 500, 500, memoryDc, 0, 0, SRCCOPY);dcappDc

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

windows - Bitbltが機能しない理由

なぜウィンドウにテキストを表示できないのですか?

0 投票する
3 に答える
8071 参照

c# - グラフィックス コンテンツをビットマップにコピー

グラフィックス オブジェクトの内容をビットマップにコピーしようとしています。私はこのコードを使用しています

このようにメソッドを使用すると

ビットマップにはコンテンツが含まれています。しかし、メソッドを呼び出す前にグラフィックス オブジェクトを描画すると、ビットマップは空白になります。

最初のケースでは機能し、後者では機能しないのはなぜですか?

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

c++ - ウィンドウに描画するコントロール gdi

私は過去に Visual Basic 6 を使用したことがあり (LOONG 前)、PictureBox というコントロールがあり、必要に応じて描画したり、デバイス コンテキストを取得したりできました。純粋な GDI/WinApi (MFC、.net、atl、gdi+ などなし) の同様の「コントロール」。私はオーナー描画ボタン コントロールを使用していましたが、クリックしたときにマウスの座標を (簡単に) 取得できないため、他のコントロールが必要であると考えました。スタティック コントロールを試しましたが、オーナー描画がサポートされていません。私は WM_PAINT を処理しようとしましたが、私の知る限り (何時間もグーグル検索した後)、それを使用してクライアントの 1 つの領域または単一の HWND だけを更新する方法はありません。

それで、私が求めているのは、純粋な GDI と Windows API を使用して、ウィンドウの選択領域をどのようにアニメートまたはブリットするかということです。MFC にはサブクラス化と呼ばれるものがあることは知っていますが、MFC は Windows API の単なるラッパーであるため、これを使用せずにこれを行う方法が必要です (前述のように、MFC はオプションではありません)。

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

visual-c++ - aeroで画面をキャプチャするためにBitBltを高速化するにはどうすればよいですか?

次のコードを使用して、GDI 関数で画面をキャプチャします。

問題は、Aero をオンにするとBitBlt 機能が非常に遅いことです。約 50 ミリ秒かかります (1 秒間に複数回キャプチャする必要があるため、これは受け入れられません)。

BitBlt は、ビデオ ハードウェアからピクセル データを直接取得します。しかし、ビデオ カードは私のテスト マシン (つまり、Radeon 5470 と Radeon 4850) ではかなり優れているので、何が問題なのかわかりません。これらのカード (最近のカードはどれも) は 2D では 3D ほど優れていないことはわかっていますが、単純なブリット操作に 50 ミリ秒かかることはないと思います。

では、どうすればよいかアドバイスをお願いできますか?私の場合、あらゆる種類の「ハック」ソリューション(安定して動作している限り)で十分です。

ターゲット システムは Win7 x64、32 ビット コードです。

前もって感謝します!