0

ソケットを介して画像のトリミングされた部分を送信する必要があるアプリケーションを作成しました。StretchBlt() を使用して画像をトリミングしました。トリミングした画像を表示してビットマップ ファイルに保存することもできます。

次に、このcroppdイメージをソケット接続で送信したいと思います。ソケット間の接続が確立されました。私の問題は、send() および recv() 関数が char * を必要とするため、Socket を介してこの画像を送受信する方法です。

1つのアイデアは、HBITMAPをmemDCオブジェクトに選択した場合、memDCをリモートソケットに直接送信できるかということです?

このタスクを達成するためのより簡単な方法はありますか?

4

2 に答える 2

4

HBITMAP (メモリ内の参照ポインタである HANDLE) を別のマシンに渡すことはできません。GetBitmapBits 関数を使用して HBITMAP をバイト配列に変換し、send() を使用してこのバイト配列を送信できます。

反対に、互換性のある別のビットマップを作成し、recv() の後にSetBitmapBits 関数を使用する必要があります。

于 2011-05-16T07:05:46.613 に答える
2

通常、生のメモリを送信するのは悪い考えです。たとえ今日、相手側に常に Windows マシンがあることを保証したとしても、将来的にはあまり柔軟ではありません。別のプラットフォームに変更したり、使用を開始したりする場合はどうでしょうかプレーンwin32上の.NET?

私がお勧めするのは、切り取った画像を .bmp ファイルに保存し、そのファイルを他の方法と同様にソケット経由で送信することです。そうすれば、自分がしていることに対して最大限の柔軟性を得ることができます。

残念ながら、C++/win32 で作業している場合、ビットマップを出力するのは少し悪夢です。いくつかのソースに基づいてまとめたビットマップを出力するコードを次に示します。これはクラス メンバーの一部を使用しますが、そこに正しい値をプラグインする方法を理解できるはずです。

http://pastebin.com/gLw7ykMU

お役に立てれば!

于 2011-05-16T07:00:28.360 に答える