問題タブ [dib]
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++ - Win API のメモリ DC はどれくらい安い/高いですか?
私は、多くの DIB ビットマップ (によって作成されたCreateDIBSection
) を持ち、Win API を使用してそれらに多くのテキストを描画する必要があるプログラムに取り組んでいます。
ビットマップ上に描画するために、Windows は によって作成されたデバイス コンテキストを必要としますCreateCompatibleDC
。
そして今、ここに2つのアプローチがあります:
ビットマップごとに 1 回 DC を作成し、それを描画に使用して、ビットマップを解放するときに削除できます。
または、ビットマップに描画する必要がある場合にのみ DC を作成し、描画関数を呼び出して DC を削除できます。
より良いアプローチは何ですか?呼び出しが少ないため、最初の方法を好みます。これにより、コードがはるかに小さくなり、少し速くなります。
しかし、ビットマップごとに長寿命の DC を保持するにはコストがかかりすぎませんか?
Edit1: アプリケーションは実際には GUI ツールキット ライブラリであり、将来的にはさまざまな予測不可能な方法で使用できるため、パフォーマンスを最大限に高め、システム リソースの使用を最小限に抑えるバランスの取れた決定が必要です。
c++ - パックされた DIB void ポインターからのコピー
C++ で記述された GDI オブジェクトをキャッシュする API に取り組んでおり、win32 API を模倣するさまざまな Create メソッドを実装しています。そのようなメソッドの 1 つは、パックされた DIB にCreateDIBPatternBrushPt()
を取り込みます。VOID*
には、ビットマップのピクセルを定義するバイト配列が直後に続く構造体がVOID*
含まれます。BITMAPINFO
パックされた DIB について調査しました。本、Programming Windows、およびウィキペディアによると、長さは行の長さとbiHeight
(のメンバーBITMAPINFOHEADER
)の積に等しくなります。
したがって、現在、私の考えは次のようなことです。
これはこれを行う有効な方法のように思えますか? また、このロジックを適切にテストできるように、lpPackedDIB
を使用する人がどこから来るのかを知りたいです。CreateDIBPatternBrushPt()
編集:
参照: https://msdn.microsoft.com/en-us/library/windows/desktop/dd183493(v=vs.85).aspx https://en.wikipedia.org/wiki/BMP_file_format#File_structure https:/ /www-user.tu-chemnitz.de/~heha/petzold/ch15b.htm (特に「DIB ピクセル ビット」セクション)
ffmpeg - rtsp ストリームを bmp 画像に変換する
RTSP ビデオ ストリームを BMP 画像に変換してから、顔検出アプリケーションに渡す必要があります。ffmpegツールを使用して同じことを行うことは可能ですか? そうでない場合は、誰かが私を適切なツール/同じことを行うカスタムコードに案内できます。
前もって感謝します!!
c - Windows クリップボードから 32 ビット RGBA 画像を取得
アプリ (RGBA8888 画像で動作) が Windows クリップボードから画像を貼り付けられるようにしたいです。したがって、Gimp、Photoshop、MSPaint などの一般的なラスター画像アプリからの画像をクリップボードから読み取ることができるはずです。
クリップボード関数を読むと、私は呼び出すことができるはずですGetClipboardData(CF_DIBV5)
Windows はそれと CF_BITMAP および CF_DIB の間で自動的に変換するため、クリップボードにあるほとんどすべてのビットマップ タイプにアクセスできます。しかし、DIB フォーマットを読んでみると、ビット深度、RGB オーダー、オプションの圧縮などの可能な組み合わせが無数にあることがわかります。 Windows API には変換関数が見当たりません (検索が苦手な場合を除きます)。考えられるすべての形式をサポートするには、これを記述するのに 1 週間かかるようです。ですから、明らかなことを見落としていないかどうか疑問に思っています。または、これを単純化するために私が行うことができる何らかの仮定がある場合...人気のあるすべての画像アプリがたまたま非圧縮/非インデックス形式で画像をクリップボードにコピーする場合など.
更新:これが私がこれまでに持っているものです:
更新 2:
明確にするために、文字通り非圧縮の 32 ビット イメージ データ (RRGGBBAA) が必要です。これは、クロスプラットフォーム アプリで好きなように操作できます。この画像を画面に描画するために Windows API を使用する必要はありません。
stdb_image.h
.bmps、.jpgs、および .pngs を必要なタイプのデータにロードできるというサードパーティ製ライブラリがあることを認識しています。したがって、アルファを失わずにクリップボード データをビットマップまたは png ファイル データに変換できる方法があれば、問題はありません。
delphi - Windows.tagBitmap を保存して完全な DIB としてストリーミングする方法は?
サードパーティのコンポーネントから、記録PBitmap
へのポインタである を受け取っています。Windows.tagBitmap
DIB
このポインターに含まれるデータを通常のデータに変換し、このデータをストリームに保存したいと思います。ちょうどGraphics.TBitmap.SaveToStream
そうです。したがって、できれば次のような手順が必要です。
MSDNでこの構造に関する情報を見つけようとしましたがBITMAPFILEHEADER
、そこに記述されているヘッダー (BITMAPINFOHEADER
など) はどれも準拠していないようtagBITMAP
です。
この問題の経験者が私を助けてくれませんか?
編集: C \ C++ の例も私にとっては問題ありません。
windows - クリップボード メモリ (uintptr) から画像データ バッファを取得するにはどうすればよいですか?
user32.dll で syscall を使用して、クリップボードの内容を取得しようとしています。Print Screenからの画像データだと思います。
今、私はこれを持っています:
ハンドルを使用して、読み取り可能なバッファにデータを取得する必要があります。
AllenDang/w32 と github の atotto/clipboard からインスピレーションを得ました。以下は、atotto の実装に基づいて、テキストに対して機能します。
しかし、デコードできる画像データを含むバッファを取得するにはどうすればよいでしょうか?
[アップデート]
@kostix が提供したソリューションに従って、私は半分の作業例を一緒にハックしました。
AllenDang/w32 には必要なもののほとんどが含まれていますが、globalSize() のように自分で何かを実装する必要がある場合もあります。
たぶん、誰かが BMP データを取得するための解決策を考え出すでしょう。その間、私は別の道を歩みます。