問題タブ [com-interface]

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 に答える
1400 参照

c# - デバイスに依存しないビットマップ バイト配列からイメージへ: パラメータが無効です

COM インターフェイスを提供する電子ソフトウェア OMICRON MPD および MI を使用しています。COM インターフェイスが提供するメソッドを使用してスクリーンショットを撮り、byte[] を画像ファイルに保存しようとしています。

私のコード:

エラーが表示されます:

バイト配列の長さを確認しました:

以下を使用して、上記のメモリ ストリームをファイルに保存できます。

意味がよくわかりませんが、これをデバッグするにはどうすればよいですか? エラーはどこにありますか? 受け取ったデータが間違っているのか、それとも画像として保存するための C# コードなのか。

COM インターフェイスのドキュメントによると、rawImg はデバイスに依存しないビットマップです (形式は .BMP ファイルと同じです)。

試行失敗 #1

無効なパラメーターについて上記と同じエラーが発生します

最終的解決

「Hex To BMP: Creation a Bitmap From Scratch」というビデオを見て、取得したデータからイメージを構築するのに役立ちました。

バイト単位の画像データ、40 バイトの DIB ヘッダー、および最初の 27 バイトのデータを含むデータを受信して​​いました (それが何であるかはわかりませんでした)。これを画像に変換するには、最初に 14 バイトのファイル ヘッダーが必要でした。これを次のように手動で作成しました。

16 進数のファイル サイズ (0x0c、0xef、0x82、847760 バイトのファイル サイズに相当する 0x00) がハード コードされていることに注意してください (バイトは簡単に動的にすることができます)。0x36 は、16 進数で 36 であるインデックス 54 にある実際の画像データが始まる場所です。

次に、DIB ヘッダーの開始位置 (私の場合はインデックス 27) にオフセットして、元の配列からそのデータを追加しました。

以下は、最初の 27 バイトの不明なデータと、インデックス 27 から始まる DIB ヘッダーを含む生データのスクリーンショットです。

ここに画像の説明を入力

ここに画像の説明を入力

上記は、最終的な画像の 16 進データのスクリーンショットです。青が14バイトのファイルヘッダー、赤がDIBヘッダーの40バイト、残りが緑から始まる画像データです。このデータを「.bmp」拡張子で保存すると、画像が得られます。

私のコード:

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

c++ - com インターフェイス ポインタを削除した場合の影響

com オブジェクトのメモリ リークが疑われるコードをデバッグしています。コードの構造は次のようなものです。

いくつかの方法:

  • com オブジェクトの新しいインスタンスを com smart ptr に作成します。
  • インターフェイス ポインター Addref を取得し、マップに追加します。

デストラクタ:

  • マップをループし、すべての com オブジェクトを削除します。例えばdelete iptr

これは、umdh ツールの出力にリークの可能性があることを示しています。オブジェクトを解放する正しい方法は、そのマップ内のすべてのオブジェクトに対して release を呼び出すことです。

delete を呼び出すとどのような影響がありますか?