問題タブ [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.
c++ - BitBlt クリップボードからビットマップをコピーすると色が正しくない
クリップボードからプログラムに画像を貼り付けています。ビットマップはバックグラウンド memDC ビットマップに配置され、画面に描画される前に別の memDC と合成されます。バックグラウンド ビットマップは、1 ピクセルあたり 8 ビットです。問題は、bitblt が Black (0x00000000) を Most-Black (0x00010101) に変えることです。同じものを MSPaint に貼り付けると、Black になります。MSPaint から Black をコピーすると、Almost Black が得られます。(他の色もバラバラです)。背景のビットマップを 32bpp に変更すると、正しい色が得られますが、現時点ではオプションではありません。
以下は、この問題を示すコードです。
GetPixel() と GetNearestColor() を使用すると、探している結果が得られるはずですが、そうではありません。ある種のパレット操作が欠けていると思いますか?
アップデート
私が本当に問題を抱えている部分は、これらの API のポイントを誤解している可能性がありますが、ピクセルの色を照会し、そのために使用する色をコンテキストに尋ねると、正しい色 (黒) が返されることです。 BitBltが生成するAlmost Blackの代わりに。
他のプログラムはクリップボードにパレットを置かないようです - おそらくパレットを必要としない 32bpp ビットマップを置いているからでしょうか? 彼らは、 MSDN のクリップボード変換テーブルに基づいて利用可能なものを見てわかる限り、DIB を行っていません。
winapi - StdPicture の透明度の色を白に変換
さまざまな画像を保持するためにCodeJock ImageManager コンポーネントを使用しています。これらの画像の 1 つを FlexGrid セルに配置したいと考えています。
私が持っている画像は Png 形式で、背景が透明なので、画像をグリッドにロードすると次のようになります。
元の画像では透明だった背景が黒くなりました:
(上記の方法を使用して画像を PictureBox にロードすると、同じことが起こります)
ドキュメントによるとStdPictureCreatePicture
オブジェクトが返されますが、黒が白になるようにこの画像を (おそらく BitBlt を使用して) 変換する方法はありますか? これが可能かどうかわかりませんか?
これを行う必要があるのは約 3 つの画像だけなので、最初にそれらを ImageList などにロードする必要がある場合は問題ありません。
c++ - BitBltを使用してビットマップC++の背景をマスクする
オブジェクトを表すビットマップを使用して小さなゲームを作成しており、ビットマップマスクを使用して背景をマスクしようとしています。私はそれをグーグルで調べて、2つのビットマップを作りました。船の1つとマスクとしての1つ。マスクは、見たいものをすべて黒、背景を白に着色しました。(これが反対であるはずだった場合は、私に知らせてください)。ビットマップを次のようにロードします。
次に、BitBltラスター操作を使用して、画面の特定の場所に背景のないビットマップを表示するにはどうすればよいですか。背景をマスクせずに、これは私がやってきたことです:
背景をマスクしてからウィンドウを新しい場所に移動する方法を教えてください。
編集:ちなみに、背景は、船が上に表示されている他のビットマップと同じ方法でロードされた別のビットマップです。
windows - 不連続 BitBlt キャプチャ
私は自分のプロジェクトで BitBlt を多用しています。多数のスレッドを作成し、各スレッドで BitBlt によって画面をキャプチャします。次の問題を除いて、今のところ期待どおりに機能します。
この問題は、ユーザーが実行中のプログラムをクリックしたとき、またはたとえばタスクバーで既に開いているエクスプローラーをクリックしたときに発生します。タスクバーで実行中のプログラムをクリックすると、最小化されるか、画面に表示されます。私が話している問題は、ちょうどこの移行で発生します。その瞬間、割り込みのようなもので、すべてのスレッドが画面のキャプチャを一瞬停止し、その後キャプチャを続けます。ボリュームコントロールウィンドウで物を上下に移動すると、同じことが起こります。なぜこれが起こっているのか、どうすればこれを防ぐことができるのかを教えてください。
ありがとう。
ジェイ
colors - BitBlt を使用して YUV 形式で画面をキャプチャする
私は現在 BitBlt 関数を使用して画面をキャプチャし、それをエンコードしています。私のエンコーダーは入力に YUV420 形式を使用するため、エンコードする前にデータを RGB から YUV に変換する必要があります。RGB の代わりに YUV 形式で画面をキャプチャする方法があるかどうか疑問に思っていましたか?
ありがとう、ジェイ
c# - BitBlt は false を返し、GetLastError は 6 (無効なハンドル) を返しますか?
前回 GDI に足を踏み入れてから数年が経ちましたが、以前にこのような問題が発生したことは覚えていません。例外は発生していませんが、BitBlt は 0 (False) を返しています。GetLastWIN32Error をチェックすると 6 が表示されます。これは無効なハンドルのようです。そして、宛先画像は空白のままです。
SelectObject の呼び出しも追加しましたが、無効なハンドル エラーには影響しませんでした。
私が見逃しているものについて何か考えはありますか?
c++ - hdcを保存して復元する方法は?
クライアント領域に線、長方形、楕円を描画するアプリケーションを作成します。何かを描画するときに、クライアント領域の画像を保存する必要があります。そして、メッセージ WM_PAINT が発生したら元に戻します。
HBITMAP を使用して保存と復元を行います
保存
戻す
しかし、うまくいきません。私を助けてください。
vb.net - ビットマップ アセットを vb.net に保存する方法
以前は VB 6.0 を使用していましたが、現在は .net に切り替えており、多くのことが変わっていることがわかりました。昔は、グラフィック アセットをピクチャ ボックスに保存して非表示にし、必要に応じてフォーム / スクリーン / キャンバスに bitblt していました。これはきちんとした方法でしたが、VB.NET で同じことをしようとしていますが、うまくいきません。
ピクチャ ボックスが画面上に表示されている場合、すべてが完全に機能しますが、ピクチャ ボックスを非表示にしたり画面外に移動したりすると、bitblt が描画するグラフィックが台無しになります。外部に保存されているビットマップを正常にロードできますが、知りたかったのは、bitblt で使用するために VB.NET アプリケーション内にグラフィック (ビットマップ) アセットを保存する最良の方法は何ですか?
参考までに、コード スニペットを次に示します。
c# - c# gdi32 bitblt は何もしないようです
BitBltを使用してグラフィックスの領域を取得し、ビットマップに保存しようとしています。しかし、ここでは、私の問題を理解しやすいことを行います。
BitBlt の後に、ソース ビットマップからブリットされたはずの赤/緑の四角形ではなく、私の destBitmap に青/黄の四角形 (宛先の初期ビットマップ) が含まれるのはなぜですか?
インポートは次のように行われます:
最後に、コードをクリーニングし、ビットマップ ストリーミングしてビットマップ コンテンツを表示します。