2011-10-19 18 views
0

デバイスコンテキスト互換のビットマップを作成し、取得したハンドルをBITMAP構造体に関連付けるにはどうすればよいですか?私が書く場合 は:GDI C/C++ - 既存のHBITMAPへのBITMAP

... 
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, width, height); // these three arguments are initialized somewhere else 
hbitmap = CreateBitmapIndirect(bitmap); // argument already initialized and properly filled 
... 

A HBITMAPはHDCと互換性の扱いに作成され、その後、(ビットマップデータで埋め)新しいHBITMAPは、その互換性を維持せずにかかわらず、初期化されます。 BITMAPからHBITMAPを作成しないで、初期化されたHBITMAPを既存のBITMAPソースで満たすことができる機能はありますか?

+1

あなたがここで尋ねていることは明確ではありません。既存のHBITMAPを変更することはできません。希望の特性を持つ新しいものを作成し、それにビットをコピーするだけです。デバイスに依存しないビットマップの使用を検討する必要があります。 – Neil

+0

私は既存のHBITMAPを変更したくないのですが、 'HBITMAP CreateCompatibleBitmapFromBitmap(HDC hDC、BITMAP *ビットマップ)'のような機能を探しています。 – Stencil

答えて

0

CreateBitmapIndirectは、入力時にBITMAPをとります。そして、あなたはHBITMAPからGetObject経由でそれを得ることができます。

BITMAP Bitmap; 
INT nResult = GetObject((HGDIOBJ) hBitmap, sizeof Bitmap, &Bitmap); 

CreateBitmapIndirectは、この構造体からビットマップを作成することができるようになります。または、CreateCompatibleBitmapを使用して、取得した幅/高さを提供する互換ビットマップを作成することができます。Bitmap

+0

ありがとう、私はHBITMAPにBITMAPは、HBITMAPが既に初期化されていることを前提としています。 CreateCompatibleBitmapは、既存のBITMAPからHBITMAPを作成しません。 – Stencil

+0

この新しい 'HBITMAP'を作成し、元のビットマップから' BitBlt'データを作成すると、完全なコピーが作成されます。これはうまくいくのでしょうか?正確に同じ基礎データを参照する新しいビットマップオブジェクトを作成することはできませんが、 'BitBlt'で画像のコピーを作成するのは簡単です。 –

1

CopyImage機能

は、新たな画像(アイコン、カーソル、またはビットマップ)と新しいものにコピー指定された画像の属性を作成します。必要に応じて、この関数は新しい画像の望ましいサイズに合わせてビットを伸ばします。

HANDLE WINAPI CopyImage(
    HANDLE hImage, 
    UINT uType, 
    int cxDesired, 
    int cyDesired, 
    UINT fuFlags 
); 

hImageコピーするイメージへのハンドル。

uTypeコピーするイメージのタイプ。このパラメータは、次のいずれかの値になります。

  • IMAGE_BITMAP 0ビットマップをコピーします。
  • IMAGE_ICON 1アイコンをコピーします。
  • IMAGE_CURSOR 2カーソルをコピーします。

cxDesired画像の望ましい幅(ピクセル単位)。これがゼロの場合、返される画像は元のhImageと同じ幅になります。

cyDesired画像の望ましい高さ(ピクセル単位)。これがゼロの場合、返される画像の高さは元のhImageと同じになります。

fuFlags

+0

ありがとうございますが、それでもデバイスを互換性のあるハンドル(または互換性のあるHBITMAP)にコピーすることはありません – Stencil

+0

@Stencil私は明らかにこの質問を理解できませんでした。あなたがすでに2つの互換性のあるハンドルを持っているなら、ローマ人のRBitBltを使用して一方から他方にコピーするだけです。 (互換性がない場合でもStretchBltを使用できます) – Neil

関連する問題