正在阅读:用Delphi来DIY一个软件"变脸"功能用Delphi来DIY一个软件"变脸"功能

2004-12-30 10:36 出处: 作者:islet8 责任编辑:linjixiong

  同理可得目标色的G、B值。现在你可以拿一个指定色(一种浅红)(RGB(153,0,0))和一种灰(RGB(204,204,204))算一下,分别四舍五入后得出的结果RGB(235,204,204),拿到做图软件里去对比一下吧,和做图软件里产生的彩色渐变出来的效果基本看不出区别了!
  既然算法已经找到了,转成代码就再轻松不过了:


  procedure TForm1.Button2Click(Sender: TObject);
  var
  i, j: Integer;
  R, G, B, RGBTemp: Cardinal;
  t1, t2: Cardinal;
  Png: TPngObject;
  Rect: TRect;
  begin
  Png := TPngObject.Create;
  Png.LoadFromFile('2.png');

  t1 := GetTickCount;

  for i := 0 to Png.Width - 1 do
  begin
  for j := 0 to Png.Height - 1 do
  begin
  RGBTemp := Png.Pixels[i, j];
  R := GetRValue(RGBTemp);
  G := GetGValue(RGBTemp);
  B := GetBValue(RGBTemp);


  { 计算公式:目标色R/G/B值 = 255 - (255 - 灰色R/G/B值) * (255 - 指定色R/G/B值) / (255 - 最深色R/G/B值) }

  Png.Pixels[i, j] := RGB(255 - (255 - R) * (255 - 153) div 255, // 按公式计算当前像素的 R 的值
  255 - (255 - G) * (255 - 0) div 255,   // 计算 G 值
  255 - (255 - B) * (255 - 0) div 255);  // 计算 B 值
  end;
  end;

  Rect.Left := 448;
  Rect.Top := 152;
  Rect.Right := Rect.Left + Png.Width;
  Rect.Bottom := Rect.Top + Png.Height;

  Png.Draw(Canvas, Rect);

  t2 := GetTickCount - t1;
  ShowMessage(IntToStr(t2));

  Png.Free;
  end;

  颜色转换后的效果如图3。

热点推荐: 
教你如何成为一名Java初级程序员变态级JAVA程序员面试32问(附答案)
将Asp.Net页面输出到EXCEL里去读书笔记:程序员的个人性格
Java编程学习:自己DIY一个JSP日历Java 的破解和反破解之道
网页编程必看:XML文法分析设计模式的有趣解释-追MM



察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品