LRGB一个带亮度值的颜色

本文介绍了一种在Delphi中实现颜色亮度调整的方法,并通过TrackBar实时改变颜色亮度,展示了如何使用Delphi进行图形处理。

截图有一些颜色失真

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 
= class(TForm)
    TrackBar1: TTrackBar;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    
procedure FormPaint(Sender: TObject);
    
procedure Edit1TrackBar1Change(Sender: TObject);
    
procedure FormCreate(Sender: TObject);
  
private
    
{ Private declarations }
  
public
    
{ Public declarations }
  
end;

  LRGB 
= Cardinal;
  
{含亮度的颜色,
  LRGB($80XXXXXX) = TColor($XXXXXX),
  LRGB($FFXXXXXX) = TColor($FFFFFF),
  LRGB($00XXXXXX) = TColor(0), 
}

var
  Form1: TForm1;


implementation

{$R *.dfm}
{$R WindowsXP.res}

function TLColor(Color: TColor; LValue: Byte = $80): LRGB;
begin
  Result :
= LValue shl 24 or ColorToRGB(Color);
end;

function LTColor(Color: LRGB): TColor;
var
  Delta: Integer;
  L, R, G, B, dR, dG, dB: Byte;
begin
  R :
= Byte(Color);
  G :
= Byte(Color shr  8);
  B :
= Byte(Color shr 16);
  L :
= Byte(Color shr 24);
  Delta := L - $80;
  
if L > $80 then
  
begin
    dR :
= not R;
    dG :
= not G;
    dB :
= not B;
  end
  
else begin
    dR :
= R;
    dG :
= G;
    dB :
= B;
  end;
  Inc(R, (dR 
* Delta) shr 7);
  Inc(G, (dG 
* Delta) shr 7);
  Inc(B, (dB 
* Delta) shr 7);
  Result :
= R or (G shl 8or (B shl 16);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  T: TColor;
begin
  T :
= StrToIntDef(Edit1.Text, 0);
  Canvas.Brush.Color :
= T;
  Canvas.FillRect(Bounds(
8050100100));
  Canvas.Brush.Color :
= LTColor(TLColor(T, TrackBar1.Position));
  Canvas.FillRect(Bounds(
20050100100));
end;

procedure TForm1.Edit1TrackBar1Change(Sender: TObject);
begin
  Edit2.Text :
= '$'
    
+ IntToHex(TLColor(StrToIntDef(Edit1.Text, 0), TrackBar1.Position), 8);
  Repaint;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered :
= True;
end;

end.

转载于:https://www.cnblogs.com/xiedewei/archive/2009/01/20/1379120.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值