重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

CreateDIBitmap関数でfdwInit引数をCBM_INITにすると初期化し、0にすると初期化しないとありますが、これの意味がイマイチよくわかりません。

で、初期化しなかった場合、後でSetDIBits関数で初期化しるというようなことが書かれているのですが。

用は、初期化していない状態とは、ビットマップの大きさもろもろの情報のみがわかっている状態で、色情報のみ不明な状態であり、初期化するとはそれに加え色情報まで追加するということ、という考えであっていますか?

で、今の自分の考えが正しいことを前提にしての質問ですが、初期化してある状態としていない状態で、使用するメモリの量が大量に違うとか、CreateDIBitmapで初期化する作業は初期化しない作業に比べて計算時間がかなり違ってくるとかいうような大きな違いがあるのでしょうか。

それとも別になにかあるんですか?

A 回答 (2件)

>初期化するとはそれに加え色情報まで追加するということ、という考えであっていますか?



それであっています。
初期化してもしなくてもDDBは作成します。この時点で新たに確保されるメモリは同じです。

DDBをDIBで初期化するという意味はわかりますか?
ディスプレイが16ビットカラーだとすると、DDBも16ビットカラーになります。DIBは8/16/24ビットなど何でもいいわけだから、結果としてフォーマットが変換されます。

SetDIBitsも含めて計算時間がかかるかどうかは重要ではありません。必要あれば呼び出すしかなくて、必要なければ呼び出さないだけの事です。

※MSDNによれば「fdwInit パラメータの CBM_CREATDIB フラグは、現在はもうサポートされていません。」とありますね・・・。
    • good
    • 0
この回答へのお礼

なるほど。
おかげでまた少し理解できました。

ところでCBM_CREATDIBがなんであるのかは知りませんが、もう必要のない知識ならば知る必要は無さそうですね。

お礼日時:2005/06/02 19:25

初期化の有無は、単に「固定の色(やパターン)で埋めるか、埋めないか」だけの違いです。



例えば、画像ファイルからHBITMAPに画像をロードして何かの処理を行う場合、中身の画像はファイルから読み込むので、初期化の必要はありません。キャンパスが広いと初期化処理に時間がかかり、無駄に時間を食う事になります。

例えば、キャンパスの上にマウスを使ってフリーハンドで何かを描かせる場合、初期の画像は「真っ白」とか「真っ黒」とかになっていないとお絵描き出来ません。つまり、初期化が必要です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!