2016-04-22 8 views
-1

CreateDIBSectionを使用してビットマップを作成し、.biWidth = 100; .biHeight = 100この擬似コードのように:新しいビットマップを作成せずにビットマップサイズを変更する

pBitmapInfo->bmiHeader.biWidth = 100; 
pBitmapInfo->bmiHeader.biHeight = 100; 
.... 
CreateDIBSection(DibDC, pBitmapInfo, DIB_RGB_COLORS, 0, 0, 0); 

後、私はちょうど300×100にビットマップのサイズを変更し、このビットマップを再利用したい(と私はもうそれを必要としないため、古いイメージをクリアする場合があります)。多くの人は、新しいサイズの新しいビットマップを作成し、古いビットマップを削除する必要があると言います。しかし私は、以前のビットマップを再利用できると期待していました。新しいビットマップを再作成したくないのは、繰り返し実行する必要がある間にパフォーマンスが低下するためです。新しいビットマップを再作成せずにビットマップサイズを変更する方法はありますか?

+0

2つのサイズのビットマップが必要な場合は、2つのビットマップを作成します。サイズ変更はおそらく悪く見えます。何も繰り返し作成する必要はなく、各ビットマップが必要なだけ「生きて」いるようにしてください。 –

+0

あなたはどの環境を使っていますか?確かにVB/C/C++/Delphiのすべてではありません。これらのタグをすべて削除し、単にWinAPIを追加することをお勧めします。 – Johan

+0

文字列と同様に、ビットマップは不変です。作成後、変更することはできません。ただし、ビットマップの一部のみを表示するか、「StretchBlt」を使用してビットマップをストレッチすることができます。 – IInspectable

答えて

0

パフォーマンスが心配な人は、ビットマップを破棄して作成することをお勧めしません。

ただし、簡単な解決方法があります。あらかじめ定義されたサイズのビットマップのプールを作成し、必要に応じてプールからビットマップを使用するだけです。

あなたが長い住んでいたDCを持っている場合は、あなたが使用することができます。

hBitmap100x100 = CreateCompatibleBitmap(MyDC, 100,100); 
hBitmap300x300 = CreateCompatibleBitmap(MyDC, 300,300); 

あなたがDCのを変え続ける場合は、DIBセクションに

hBitmap100x100 = CreateDIBSection(DibDC, pBitmapInfo100x100, DIB_RGB_COLORS, null, 0, 0); 
hBitmap300x300 = CreateDIBSection(DibDC, pBitmapInfo100x100, DIB_RGB_COLORS, null, 0, 0); 

を使用するだけでこれらを超えるとオーバーを再利用し続けます。
好きな場合は、アレイに12個もあることもあります。
プログラムの起動時に作成し、完了したら破棄します。

+0

'MyDC'は一時的なリソースで、実行中に頻繁に変更されます(時には存在しないこともあります)。これらのビットマップは互換性のあるビットマップではなく、DIBセクションでなければなりません。 – andlabs

+0

ありがとうございましたヨハン、私はこの代替方法に非常に感謝しています。私は予備テストをして、この方法がパフォーマンスを大幅に向上させることを発見しました。私はこの答えを最高のものとしてマークする前に、もう少しテストをしています。 – DucFabulous

関連する問題