GetNearestColorで純色を取得する

解決


meton  2008-11-28 04:38:38  No: 69260

こんにちは。

GetNearestColorというWin32のAPI関数を使おうとしています。
(APIのみ使用)

この関数は、引数で指定した色について、
・画面で正しく発色できる場合はそのまま
・画面で発色できない色の場合は発色可能な近い色に変換して
返してくれるものと考えています。

そこで、ためしに画面をハイカラー(65k色)にした状態で、

HDC hDC = GetDC( NULL );
for( int i = 0; i < 255; i++ )
{
   COLORREF clrA = RGB( 0, 0, i );
   COLORREF clrB = GetNearestColor( hDC, clrA );
   _ASSERT( clrA == clrB );    // 発色できない色の場合、捕えてほしい
}

ReleaseDC( NULL, hDC );

としたところ、ASSERTされませんでした。

ハイカラーなので青を256段階フルには表現できないはずだ(だから、
どこかのタイミングでASSERTされるだろう)と期待したのですが、
何かAPI関数の理解が間違っているのでしょうか?

それならばと、ためしに、

HDC hDC = GetDC( NULL );
for( int i = 0; i < 255; i++ )
{
   COLORREF clrA = RGB( 0, 0, i );
   COLORREF clrB = GetNearestColor( hDC, clrA );
   _ASSERT( clrA == clrB );

   SetPixel( hDC, 0, 0, clrB );     // 実際にピクセルをプロットしてみる
   COLORREF clrC = GetPixel( hDC, 0, 0 );   // プロットした結果を取得
   _ASSERT( clrB == clrC ); 
}

ReleaseDC( NULL, hDC );

とすると、iの値によってはGetPixelの次でASSERTされてしまいました。

たぶん私の理解がどこかで間違っているのだろうと思いますが、
問題点をご教授いただけませんでしょうか?

よろしくお願いします。

#ビデオカードはIntel 965のオンボードビデオ。最新ドライバです。


meton  2008-12-01 20:01:47  No: 69261

同API関数のMSDNのヘルプ内に
「システムパレット内の色のうち、」というただし書きがあるのを
見落としていました。
解決とさせていただきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加