21.04.2013, 16:05
|
Прохожий
|
|
Регистрация: 29.11.2010
Сообщения: 3
Репутация: 10
|
|
Изменение контрастности изображения
Всем привет, помогите решить проблему...
Необходимо изменить контрастность у изображения и распечатать. На счет контрастности я нашел http://www.delphisources.ru/pages/faq/base/bmp_contrast.html
Но при его работе у меня почему просто исчезает картинка...
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, JPEG, ComCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
img1: TImage;
dlgOpen1: TOpenDialog;
lbl1: TLabel;
btn2: TButton;
TrackBar1: TTrackBar;
chk1: TCheckBox;
procedure btn1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Contrast(Bitmap: TBitmap; Value: Integer; Local: Boolean);
function BLimit(B: Integer): Byte;
begin
if B < 0 then
Result := 0
else if B > 255 then
Result := 255
else
Result := B;
end;
var
Dest: pRGBTriple;
x, y, mr, mg, mb,
W, H, tr, tg, tb: Integer;
vd: Double;
begin
if Value = 0 then
Exit;
W := Bitmap.Width - 1;
H := Bitmap.Height - 1;
if Local then
begin
mR := 128;
mG := 128;
mB := 128;
end
else
begin
tr := 0;
tg := 0;
tb := 0;
for y := 0 to H do
begin
Dest := Bitmap.ScanLine[y];
for x := 0 to W do
begin
with Dest^ do
begin
Inc(tb, rgbtBlue);
Inc(tg, rgbtGreen);
Inc(tr, rgbtRed);
end;
Inc(Dest);
end;
end;
mB := Trunc(tb / (W * H));
mG := Trunc(tg / (W * H));
mR := Trunc(tr / (W * H));
end;
if Value > 0 then
vd := 1 + (Value / 10)
else
vd := 1 - (Sqrt(-Value) / 10);
for y := 0 to H do
begin
Dest := Bitmap.ScanLine[y];
for x := 0 to W do
begin
with Dest^ do
begin
rgbtBlue := BLimit(mB + Trunc((rgbtBlue - mB) * vd));
rgbtGreen := BLimit(mG + Trunc((rgbtGreen - mG) * vd));
rgbtRed := BLimit(mR + Trunc((rgbtRed - mR) * vd));
end;
Inc(Dest);
end;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if dlgOpen1.Execute then
img1.Picture.LoadFromFile(dlgOpen1.FileName);
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
lbl1.Caption := IntToStr(TrackBar1.Position);
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
Contrast(Img1.Picture.Bitmap,TrackBar1.Position, chk1.Checked);
Img1.Repaint;
end;
end.
|