問題タブ [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.

0 投票する
5 に答える
29369 参照

c - Win32 のみを使用して、HBITMAP を *.bmp ファイルに保存します。

純粋な Win32 プロジェクトに HBITMAP があります (外部ライブラリは使用されません)。プロジェクトに依存関係を追加する必要がないように、Winapi や CRT 関数のみを使用して *.bmp ファイルにエクスポートできますか?

0 投票する
0 に答える
300 参照

winapi - WM_MOUSEMOVE で createBitmapIndirect を繰り返し呼び出すと、最終的に NULL が返されるのはなぜですか?

リスト ビュー コントロールとフォトショップ スタイルの HSV カラー ピッカーを含む複雑な色編集ダイアログ ボックスを作成しています。このダイアログは説明どおりに使用されます。ユーザーは最初に特定のアイテムをクリックし、次にカラーピッカーでカーソルを操作してアイテムに適切な色を設定し、次に別のアイテムをクリックしてプロセスを繰り返します。

私の hotoshop stle HSV colorpicker は 2 つの長方形に分割されています。

  1. 現在選択されている HUE のすべての VALUES および SATURATION バリエーションを表示する 256x256 ウィンドウ。

実現: 私はいくつかの調査を行い、GDI ビットマップを使用することにしました。そこで、GDI BITMAP 構造体に入力し、dc を取得し、comaptable dc を取得し、CreateBitmapIndirect によって hBitmap を作成します。

次に、マウスの移動時に、ユーザーが色相ランプで他の HUE を選択したかどうかを確認する必要があります。選択した場合は、BITMAP のバイト配列を新しい値で埋める必要があります。簡単にするためのリストでは、マウスを動かすたびに HUE を変更し、呼び出しごとにビットマップ全体を再充填する必要があります。

40回または50回の最初の呼び出しでは問題なく動作しますが、その後すべてのウィンドウが遅れてDCが失われ、ウィンドウを移動できますが、領域がリフレッシュされません. 私の停止マークは、0x00000000 を示し、GetLastError が 0 を示す hBitmap=CreateBitmapIndirect(...) の問題を示しています。

そして今、主な質問は、私が間違っていることは何ですか?

0 投票する
1 に答える
82 参照

c++ - C++ でオブジェクトを管理する際のメモリ割り当ての論理的な問題

関数の設計に問題があり、適切な解決策が見つかりません (私は C++ の初心者です)。

数日前、これに関連する別の質問をします。

だから、私はスクリーンキャプチャをする機能を持っています。それは完全に機能します。Image実際には、この関数が実装したクラスからオブジェクトを返すようにしたいのです。

基本的には、次のとおりです。

そして、私の機能は次のようなものです:

bitPointer作成された usingは、CreateDIBSection実際には最初のピクセルの値へのポインターです (よく理解していれば)。

次に、単純なループを使用できます。

これが私の問題です。

hBitmap呼び出して解放するDeleteObject(hBitmap)必要があります。そうしないと、メモリスペースがなくなります (そして、ループが最終的にクラッシュします)。

しかし、私はそれをどこで行うべきかわかりません。

関数内で実行したいのですが、 を呼び出すDeleteObject()と、これも破棄されるため、返されたオブジェクトbitPointerからピクセルにアクセスできなくなります。Image実際、bitPointer変数がポインターであるという事実に少し混乱しています。後で破壊されるのを防ぐためにコピーできないことを意味します。解決策が見つかりません。

私が試した2つの解決策:

  • DeleteObject()my classを呼び出すデストラクタを作成しますImage
    デストラクタはループ内だけでなく関数から呼び出されるため、機能しませんでした。
  • HBITMAP hBitmapクラスに属性を追加し、ループ内からImage呼び出します。 それは本当に便利ではありません。さらに、新しい Image オブジェクトを宣言する必要があり、私が書いたループのように匿名で行うことはできません。DeleteObject()

それで、私は立ち往生しています。誰か助けてもらえますか?

0 投票する
1 に答える
807 参照

c# - P/Invoke を使用する以外に、hBitmap で DeleteObject() を呼び出すにはどうすればよいですか?

私はこのようなコードを扱っています(ここから)

また、MSDN によると、電話をかけるたびに、管理されていないリソースを解放するためにBitmap.GetHbitmap()を呼び出す必要があります。DeleteObject()hBitmap

私が見たすべての答えとMSDNは、DeleteObject()関数をP/Invokeする必要があると言います。hBitmapP/Invoke を使用せずに を取得したため、これを適切に取り除くために P/Invoke を突然使用する必要があるため、これは少し正気ではないように見えます。

P/Invoke 以外DeleteObject()に myを呼び出す方法はありませんhBitmapか?

0 投票する
1 に答える
1135 参照

c++ - BitBlt を使用せずに HBITMAP の一部を抽出する方法

HBITMAP オブジェクトがあります。BitBlt を使用せずに、それをパーツに分割し、これらのパーツのビットまたは新しいビットマップを取得したいと思います

BitBlt でできますが、遅いです。パーツの抽出には約 50 ミリ秒かかります。ビットマップから取得したバイト配列の領域を抽出することも考えましたが、難しそうです。他に方法はありますか?

ありがとう!

0 投票する
0 に答える
54 参照

c++ - hBitmap から BYTE 配列に jpeg を保存します

よろしくお願いします:)

私のコードでは、ローカル コンピューターからビットマップを読み込み、最後に HBITMAP 構造を受け取ります。この hBitmap を JPEG に変換して、離れたサーバー側のソケットに送信したいと思います。

今では、CImage 関数のおかげで画像を jpg 形式でディスクに保存し、ネットワーク経由で送信することができます。ただし、ディスクに一時ファイルを書き込まずに、きれいにやりたいと思います。私の最初の考えは、JPEG データのバイト配列を送信することでしたが、その方法がわかりません... 何か考えはありますか?

以下は、JPEG ファイルを生成するために使用するコードのスニペットです。

助けてくれてありがとう。