none
CDC::SetPixel(), CDC::SetPixelV() RRS feed

  • 質問

  •  


    MFC の SetPixel(), SetPixelV()で不可解な現象が起こっています。
    以下のようなコードで、x方向において256ピクセル毎に表示できない領域ができます
    (真っ黒になるはずですが、シマウマな状態になります)。

    私の環境だけでしょうか?

     

    Code Snippet
     CPaintDC dc(this); // 描画のデバイス コンテキスト
     
     // TODO: ここにメッセージ ハンドラ コードを追加します。
     for(int x = 0; x < 4096; x++) {
      for(int y = 0; y < 512; y++) {
       dc.SetPixelV(x, y, 0);
      }
     }

     

     


    Windows Vista Enterprise 日本語版
    Visual Studio 2008 Professional Edition 日本語版 (Version 9.0.21022.8 RTM)

     

    2008年4月23日 14:15

回答

  • Vista で Aero を OFF にすると SetPixel がうまく動かないそうです。
    しかも、SP1 でも修正されていないとか。

    SetPixel の使用はあきらめて、別の方法(例えば FillSolidRect とか、CreateDIBSection による直接操作とか)に切り替えたほうが良さそうですね。

    2008年4月23日 16:04

すべての返信

  • Vista で Aero を OFF にすると SetPixel がうまく動かないそうです。
    しかも、SP1 でも修正されていないとか。

    SetPixel の使用はあきらめて、別の方法(例えば FillSolidRect とか、CreateDIBSection による直接操作とか)に切り替えたほうが良さそうですね。

    2008年4月23日 16:04
  •  

    AeroのOn/Offで挙動が変わることを確認しました。

    任意の点に任意の色を書きたいので、CreateDIBSection等で
    対処したいと思います。

    ありがとうございました。

    2008年4月23日 20:39
  • 同様ですが、当方では以下の手段でも回避できました。

     

    1. CDC:: CreateCompatibleDC, CDC:: CreateCompatibleBitmap() でメモリデバイスコンテキストを作る

    2. メモリデバイスコンテキストに対し、SetPixel()

    3. 画面へBitBlt()

    2008年4月28日 21:24