こんにちは。
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のオンボードビデオ。最新ドライバです。
同API関数のMSDNのヘルプ内に
「システムパレット内の色のうち、」というただし書きがあるのを
見落としていました。
解決とさせていただきます。
ツイート | ![]() |