이미지의 밝기( brightness) / 선명도(definition) 조절하기
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;
'Delphi Tip > 이미지-영상' 카테고리의 다른 글
밝기(bright), 대비(contrast), 감마(gamma), 색농도(Saturation) 조절 (0) | 2024.06.19 |
---|---|
TImage에 색상바 그리기 (0) | 2024.06.03 |
폼 배경에 비트맵 넣기 (0) | 2024.04.21 |
BMP에 DPI값 세팅하기 및 알아오기 (0) | 2024.01.26 |
이미지 마우스로 움직이기 (0) | 2024.01.04 |
댓글