none
StretchDIBitsを使い縮小表示した時、前の画像が部分的に残ったままになる。 RRS feed

  • 質問

  • クサキです。よろしくお願いします。

     

    VC6.0でStretchDIBitsを使いDLLを作り、

    VB6.0のピクチャーボックスで表示しています。

     

    例えば、ピクセル配列とピクチャーボックスを同じ大きさとします。

    最初にモノクロ画像を1倍で表示し、次に1/2倍で表示した場合、

    面積比で1/4に縮小された画像は正しく表示されるのですが、

    残りの3/4の部分に1倍の時の画像が残ったままになります。

    残りの部分をピクチャーボックスの色にするにはどうしたら良いですか?

    2008年2月6日 2:09

回答

  • みなさん、どうもありがとうございました。

    ピクチャーボックスのバックグラウンドの色(GetSysColorで得たもの)

    で塗りつぶし上手く行くようになりました。

     

     

    2008年2月7日 2:59

すべての返信

  • StretchDIBitsは、指定した座標から指定した幅と高さに縮小/拡大して
    コピー先にコピーするだけだと思うので、それ以外の部分は
    コピーされる前の状態になっているのだと思います。

    縮小画像をStretchDIBitsする前に、全領域にピクチャーボックスの色を
    コピーするか、
    ピクチャーボックスとDCそのものを縮小すれば
    良いのではないでしょうか。

    # 透明のピクチャーボックスを作ることができて、その描画面を
    # どうにかクリアする方法があれば知りたいのですが
    # 残念ながらわかりません。。。

    2008年2月6日 7:30
  • 縮小された画像が正しく表示されているということは、StretchDIBits はうまく動作していることになります。
    残りの部分はピクチャーボックスの色(どんな色?)で塗りつぶしましょう。

    1. ピクチャーボックスをピクチャーボックスの色で塗りつぶす。
     (処理内容が良く分からないのでこんな書き方になってしまいますが、要は自前でクリアするということです。)
    2. その上に縮小画像を描画する。

    これで駄目なら、再描画の領域が足りていない可能性もあります。
    (「最小化→元に戻す」で残りの部分の画像が消える場合はコッチです。)

    2008年2月6日 8:45
  • みなさん、どうもありがとうございました。

    ピクチャーボックスのバックグラウンドの色(GetSysColorで得たもの)

    で塗りつぶし上手く行くようになりました。

     

     

    2008年2月7日 2:59