問題タブ [hbitmap]
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 - HBITMAPの表示
事前にお詫び申し上げます。私はcに不慣れで、自分が何をしているのか本当にわかりません。
Windows7およびcを使用してスクリーンショットをキャプチャして表示しようとしています。私はそれがばかげているように聞こえることを知っています、最終的に私は異なるプログラムでこれらの各機能が必要になります、画面をキャプチャするものはそれを表示するものに画像を送信しますが、今のところ私は両方を1つのプログラムで動作させることを試みています。これまでにまとめたコードは次のとおりです。
HBITMAPを表示する方法が見つかりませんでした。HBITMAPを表示するにはどうすればよいですか?
更新:DrawBitmapを追加しましたが、機能していません...次の出力が表示され、処理方法がわかりません。
'win_screenshot.exe':ロード済み'C:\ Users \ mbrooker \ Documents \ Visual Studio 2010 \ Projects \ win_screenshot \ Debug \ win_screenshot.exe'、シンボルがロードされました。'win_screenshot.exe':ロード済み'C:\ Windows \ SysWOW64 \ ntdll.dll'、PDBファイルが見つからないか開くことができません'win_screenshot.exe':ロード済み' C:\ Windows \ SysWOW64 \ kernel32.dll'、見つかりませんまたはPDBファイルを開く'win_screenshot.exe':ロードされた'C:\ Windows \ SysWOW64 \ KernelBase.dll'、PDBファイルが見つからないか開くことができません'win_screenshot.exe':ロードされた'C:\ Windows \ SysWOW64 \ user32.dll' 、PDBファイル'win_screenshot.exe'が見つからないか開くことができません:ロードされた'C:\ Windows \ SysWOW64 \ gdi32.dll'、PDBファイル'win_screenshot.exe'が見つかりませんまたは開くことができません:ロードされました'C:\ Windows \ SysWOW64 \ lpk.dll'、PDBファイル'win_screenshotが見つからないか開くことができません。ロードされたシンボル。'win_screenshot.exe':ロード済み'C:\ Windows \ SysWOW64 \ imm32.dll'、PDBファイルが見つからないか開くことができません'win_screenshot.exe':ロード済み' C:\ Windows \ SysWOW64 \ msctf.dll'、見つかりませんまたはPDBファイルを開く'win_screenshot.exe':ロードされた'C:\ Windows \ SysWOW64 \ apphelp.dll'、PDBファイルが見つからないか開くことができない'win_screenshot.exe':ロードされた'ImageAtBase0x4ab60000'、ロードは包含/除外設定により無効になっています。'win_screenshot.exe':アンロードされた'ImageAtBase0x4ab60000'プログラム'[1480] win_screenshot.exe:Native'がコード0(0x0)で終了しました。win_screenshot.exe':ロード済み' C:\ Windows \ SysWOW64 \ apphelp.dll'、PDBファイルが見つからないか開くことができません' win_screenshot.exe':ロード済み' ImageAtBase0x4ab60000'、インクルード/除外設定によりロードが無効になっています。'win_screenshot.exe':アンロードされた'ImageAtBase0x4ab60000'プログラム'[1480] win_screenshot.exe:Native'がコード0(0x0)で終了しました。win_screenshot.exe':ロード済み' C:\ Windows \ SysWOW64 \ apphelp.dll'、PDBファイルが見つからないか開くことができません' win_screenshot.exe':ロード済み' ImageAtBase0x4ab60000'、インクルード/除外設定によりロードが無効になっています。'win_screenshot.exe':アンロードされた'ImageAtBase0x4ab60000'プログラム'[1480] win_screenshot.exe:Native'がコード0(0x0)で終了しました。
c++ - 既存の HBITMAP をデスクトップの背景としてリセットする (Win32)
デスクトップ上に透明なウィンドウを作成したいと考えています。
そのために、デスクトップの背景を持つ HDC を作成し (デスクトップの HBITMAP を作成して HDC に適用)、UpdateLayeredWindowを呼び出しました。
ここまでは順調ですね。パフォーマンスの問題については、この質問
と同じように、永続的な GDI+ オブジェクトを保持する必要があります。
最初の塗装の反復では、すべてうまくいきます。2 回目の描画では、HDC と HBITMAP が変更されていないため、既存の HDC に再描画します。つまり、二重の画像が得られます (背景は消去されません)。
これが私がやっていることのコード例です:
何か案は?
winapi - Windows GetDIBits 関数を使用してビットマップ ピクセル値を取得する
GetDIBits 関数を使用してビットマップのピクセルを取得しようとしています。私は Windows GDI/API について勉強したことがないので、最初の引数である HDC についてはよくわかりません。SO と Web で無数の投稿を検索しましたが、この特定のケースで HDC を初期化する方法に関する情報や例を見つけることができませんでした。ピクセル値をどこまで読んだかは次のとおりです。
解決:
ウェブをさらに精査した後、次のことをまとめることができました。
c++ - DC を使用する場合、作業が終了した後で常にデフォルト オブジェクトを新しいオブジェクトに置き換える必要がありますか?
以下で作成された一時DCを使用するだけです:
次に、この一時 DC に画像を描画します。この DC でイメージを取得したいので、使用CreateCompatibleBitmap()
して一時ビットマップを作成し、使用SelectObject()
して DC でオリジナルを取得しHBITMAP
ます。
DeleteDC()
元のビットマップを使い終わったら、元のビットマップを削除したいだけです。
これは間違っていますか?
DC を使用する場合、元のオブジェクトが新しいオブジェクトで作業を終了した後、元のオブジェクトを常に置き換える必要がありますか?
c# - C# から C++ アンマネージ コードにビットマップを渡す
ビットマップをアンマネージ C++ DLL に渡し、POINT 構造体を返すコードを C# で記述しようとしていますが、成功しませんでした。
インターネットで多くの調査を行いましたが、問題の解決に役立つ「Gotcha」の記事やコードが見つかりませんでした。
これまでに思いついた最高のものは、私の C# アプリによって呼び出されたマネージ C++ DLL でラップされたアンマネージ C++ DLL です。テストでは、整数などの単純な型を渡し、問題なく整数を返すことができました。今私が抱えている問題、ビットマップについて。
HBITMAP を (C# でビットマップの GetHBitmap() 関数を使用して) 渡そうとしましたが、コンパイル中に「パラメーター 1 を 'System::IntPtr' から 'HBITMAP' に変換できません」および「Class1.FindImage( void *, void *) は保護レベルのためアクセスできません。」
これが私のコードの一部です:
メインアプリ:
ImportWrap.h:
ImportWrap.cpp:
ImgFuncs.h
ImgFuncs.cpp
私は何を間違っていますか、それとも私のアプローチで完全に地図から外れていますか? 私がやろうとしていることをコーディングする正しい方法に関する提案を喜んで受け入れます。非常に高速に動作する別の画像内の画像を見つけるために使用される C++ コードがいくつかあります。残念ながら、C# でロックビットを使用しても、十分な速度ではありません。そこで、画像検索に C++ コードを利用したいと思います。
今後も問題が発生することは間違いありませんが、このつまずきを乗り越えることができれば、対処できる可能性があります。ご覧のとおり、私の C++ の知識は限られています。
video - IGraphBuilderからHBitmapを取得する
IGraphBuilderからビデオをエンコードしようとしています。このため、HBitmapが必要になります。これを実行することは可能ですか?
PS IGraphBuilderにはすでにRenderFile関数があることは知っていますが、これは私の使用には遅すぎるので、H264でレンダリングすることもお勧めします
c# - HBitmap をアルファ チャネルを維持したまま Bitmap に変換
GoogleとStack Overflowで検索していますが、実際の例が見つかりません。
HBitmap を Managed .NET ビットマップに変換する必要がありますが、次のコードではアルファ チャネルが保持されません。
SO でこの回答を見つけましたが、うまくいきません。例では透明度を保持していますが、画像を Y 軸で 180 度反転させ、180 度回転させます。どうしてか分かりません。
この他の例は機能しているように見えますが、C++ です
誰かがこれを C# で動作させており、メモリ リークなしで非常に重要ですか?
前もって感謝します。
編集: @Hans Passant からのコメントについては、次のコードを使用して HBitmap を取得します (OS からサムネイルまたはアイコンを取得するためのシェル呼び出しです (Vista と Win7 のみ)。
qt - QLabelに配置されたHBitmapを削除する
Qt GUIに一連のQLabel
オブジェクトがあり、それらにHBITMAPオブジェクトを入力します。これらのHBITMAPはメモリ内のバッファであり、ディスク上には存在しません。
ここで、QPixmap
s fromWinHBITMAP
to create a
QPixmapQLabelsetPixmap`which I can then pass to the
関数を使用しs
ます。
さて、問題は、QLabelの現在の画像を別の画像で上書きするとどうなるかということです。画像はメモリに残りますか?削除されますか?
私のプログラムは約1時間実行した後、非常に大きな割合で成長するため、適切に削除されないのではないかと思います。(1.7GB)メモリ内。
変換を行うコードは次のとおりです。
c++ - jpegメモリバッファからHBITMAPを作成しますか?
JPEG 形式のバイト配列から HBITMAP を作成したいと考えています。
検索しましたが、ビットマップファイルからしか作成できません
誰かがそれを行う方法を教えてもらえますか?
c++-cli - HBITMAPからビットマップ(.NET)を作成する
私はC++/ CLIを使用していて、rawHBITMAP
という名前hStrip
があります。これをで表示する必要があるPictureBox
ので、次の関数を見つけましたが、これにSystem::Drawing::Image::FromHbitmap
は、rawを渡す前IntPtr
に変換する必要があるのか、それともこのようにそれを渡すことを逃れることができますか?HBITMAP
IntPtr
変換する必要がある場合、どのように変換する必要がありますか?私は実際にこの方法で変換を見つけていません。しかし、私はそれを別の方法で見つけました。