본문 바로가기
Delphi Tip/이미지-영상

이미지의 밝기 / 선명도 조절하기

by MonoSoft 2024. 6. 18.
728x90
반응형

이미지의 밝기( brightness) / 선명도(definition) 조절하기

728x90

 

 

 

 

 

uses Math;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

SrcImg.Picture.Bitmap.PixelFormat:=pf32bit;

DstImg.Picture.Bitmap.PixelFormat:=pf32bit;

end;

 

procedure TForm1.ScrollBar_BrightChange(Sender: TObject);

type

TColor32 = record

B, G, R, A: Byte;

end;

TColor32Array = array[Byte]of TColor32;

PColor32Array = ^TColor32Array;

var

W, H, iPixel: Integer;

SrcP, DstP: PColor32Array;

Bright, Contrast: Single;

sR, sG, sB, dR, dG, dB: Single;

begin

Bright :=ScrollBar_Bright .Position/$FF;

Contrast:=ScrollBar_Contrast.Position/$FF;

W:=SrcImg.Picture.Bitmap.Width; H:=SrcImg.Picture.Bitmap.Height;

SrcP:=SrcImg.Picture.Bitmap.ScanLine[H-1];

DstP:=DstImg.Picture.Bitmap.ScanLine[H-1];

 

for iPixel:=0 to W*H-1 do

begin

// 원본 색상을 얻고

sR:=SrcP[iPixel].R/$FF;

sG:=SrcP[iPixel].G/$FF;

sB:=SrcP[iPixel].B/$FF;

// 밝기 조절을 하고

dR:=sR+Bright;

dG:=sG+Bright;

dB:=sB+Bright;

 

// 선명도 조절...

dR:=(dR-0.5)*Contrast+0.5;

dG:=(dG-0.5)*Contrast+0.5;

dB:=(dB-0.5)*Contrast+0.5; // 최종 색상은 이렇다...

DstP[iPixel].R:=Min($FF, Max(0, Round(dR*$FF)));

DstP[iPixel].G:=Min($FF, Max(0, Round(dG*$FF)));

DstP[iPixel].B:=Min($FF, Max(0, Round(dB*$FF)));

end;

 

DstImg.Repaint;

 

end;

 

728x90
반응형

댓글