首页  编辑  

“高亮”一个图片

Tags: /超级猛料/Picture.图形图像编程/图形处理算法/   Date Created:

'highlight' a bitmap?

Author: Renate Schaaf  

{

Question:

 Does anyone know of a way that I can achieve the same effect on a bitmap

 that windows achieves when you single click on an icon on the desktop?  In

 other words, I want to "sorta highlight" a bitmap and let the user know that

 it's selected.

Answer:

 To me it appears as if the icons on my desktop are highlighted by overlaying

 them with a certain color, so I guess the following routine is of use.

}

procedure Highlight(aSource, ATarget: TBitmap; AColor: TColor);

//alters ASource to ATarget by making it appear as if

//looked through

//colored glass as given by AColor

//ASource, ATarget must have been created.

//Isn't as slow as it looks.

//Physics courtesy of a post by K.H. Brenner

var i, j: Integer;

 s, t: pRGBTriple;

 r, g, b: byte;

 cl: TColor;

begin

 cl := ColorToRGB(AColor);

 r := GetRValue(cl);

 g := GetGValue(cl);

 b := GetBValue(cl);

 aSource.PixelFormat := pf24bit;

 ATarget.PixelFormat := pf24bit;

 ATarget.Width := aSource.Width;

 ATarget.Height := aSource.Height;

 for i := 0 to aSource.Height - 1 do

 begin

   s := ASource.Scanline[i];

   t := ATarget.Scanline[i];

   for j := 0 to aSource.Width - 1 do

   begin

     t^.rgbtBlue := (b * s^.rgbtBlue) div 255;

     t^.rgbtGreen := (g * s^.rgbtGreen) div 255;

     t^.rgbtRed := (r * s^.rgbtRed) div 255;

     inc(s);

     inc(t);

   end;

 end;

end;