Главная страница | назад





Article #17780: Color problems in 256 color mode.

 Question and Answer Database
FAQ2780D.txt Color problems in 256 color mode.
Category :VCL
Platform :All
Product :All 32 bit
Question:
When I am drawing graphics with my application in 256 color
mode (or less), some pen and text colors do not match my
brush colors.
Answer:
Unless you are using a palette, Windows will attempt to
convert pen and text colors to the nearest pure color
available. You can determine the nearest pure color, a given
color will map to, by calling the Windows API function
GetNearestColor(). If you wish to use dithered colors for a
pen, you can also set the pen style to the psInsideFrame
style. When using this style, the pen draws lines within the
frame of closed shapes that specify a bounding rectangle
instead of centering the line over the shape. For the
psInsideFrame style to have an effect, the pen width must be
larger than 1 pixel.
Example:
procedure TForm1.Button1Click(Sender: TObject);
var NearestColor : TColorRef;
begin
Form1.Canvas.Brush.Color := RGB(143, 53, 22);
Form1.Canvas.Pen.Color := RGB(143, 53, 22);
Form1.Canvas.Pen.Width := 10;
Form1.Canvas.Ellipse(10, 10, 100, 100);
Form1.Canvas.Pen.Style := psInsideFrame;
Form1.Canvas.Ellipse(10, 110, 100, 200);
Memo1.Lines.Add(
'The nearest displayable color to RGB(143, 53, 22) is:');
NearestColor :=
GetNearestColor(Form1.Canvas.Handle,
RGB(143, 53, 22));
Memo1.Lines.Add('Red := ' +
IntToStr(GetRValue(NearestColor)));
Memo1.Lines.Add('Red := ' +
IntToStr(GetGValue(NearestColor)));
Memo1.Lines.Add('Blue := ' +
IntToStr(GetBValue(NearestColor)));
end;
7/16/98 4:31:28 PM

Last Modified: 01-SEP-99