これは、「明るい」(白い紙では見にくい) 色を黒にマッピングするために使用する、私が書いた関数 (およびいくつかのコメントを説明したもの) です。印刷する各色を呼び出しますCheckSwapWhite
が、ピクセルごとに呼び出すこともできます。グレースケールで何かを作成するための公式はありませんが、クリエイティブな Google 検索で見つけることができると思います。
//----------------------------------------------------------------------------
/*
Colour Brightness Formula
The following is the formula suggested by the World Wide Web
Consortium (W3C) to determine the brightness of a colour.
((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000
The difference between the background brightness, and the
foreground brightness should be greater than 125.
*/
//----------------------------------------------------------------------------
int ColorBrightness( COLORREF cr )
{
return ((GetRValue(cr) * 299) +
(GetGValue(cr) * 587) +
(GetBValue(cr) * 114)) / 1000;
}
//----------------------------------------------------------------------------
/*
Colour Difference Formula
The following is the formula suggested by the W3C to determine
the difference between two colours.
(maximum (Red value 1, Red value 2) - minimum (Red value 1, Red value 2))
+ (maximum (Green value 1, Green value 2) - minimum (Green value 1, Green value 2))
+ (maximum (Blue value 1, Blue value 2) - minimum (Blue value 1, Blue value 2))
The difference between the background colour and the foreground
colour should be greater than 500.
*/
//----------------------------------------------------------------------------
int ColorDifference( COLORREF c1, COLORREF c2 )
{
return (max(GetRValue(c1), GetRValue(c2)) - min(GetRValue(c1), GetRValue(c2)))
+ (max(GetGValue(c1), GetGValue(c2)) - min(GetGValue(c1), GetGValue(c2)))
+ (max(GetBValue(c1), GetBValue(c2)) - min(GetBValue(c1), GetBValue(c2)));
}
//----------------------------------------------------------------------------
COLOREF CheckSwapWhite( COLORREF cr )
{
int cdiff;
int bdiff;
bdiff = 255 - ColorBrightness( cr ); // 255 = ColorBrightness(WHITE)
cdiff = ColorDifference( cr, RGB(0xFF,0xFF,0xFF) );
if( (cdiff < gnDiffColorThreshold) || // (500 by default)
(bdiff < gnDiffBrightThreshold) ) // (125 by default)
{
return RGB(0x00,0x00,0x00); // black
}
return cr;
}
2 つのしきい値変数は、指定されたデフォルトで構成可能な設定です。