Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
Delphi 10.4 Sydney
|
AW: Durchschnittsfarbe eines Bitmap "schnell" ermitteln
10. Mai 2021, 09:22
Delphi-Quellcode:
function TForm3.GetAvgBmpColor: TColor;
type
TRgbTriple = packed record
// do not change the order of the fields, do not add any fields
Blue: Byte;
Green: Byte;
Red: Byte;
end;
TRgbTripleArray = packed array[0..MaxInt div SizeOf(TRgbTriple) - 1] of TRgbTriple;
PRgbTripleArray = ^TRgbTripleArray;
var
x, y: Integer;
r, g, b: Integer;
Pixel: TRgbTriple;
Bmp: TBitmap;
Filename: string;
wic: TWICImage;
Resolution: Integer;
ScanLinePtr: Pointer;
begin
Result := 0;
Filename := ' Der magische Pfad';
if not FileExists(Filename) then
Exit;
bmp := TBitmap.Create;
wic := TWICImage.Create;
try
wic.LoadFromFile(Filename);
bmp.Assign(wic);
bmp.PixelFormat := pf24bit;
r := 0;
g := 0;
b := 0;
Assert(bmp.PixelFormat = pf24bit);
for y := 0 to Pred(Bmp.Height) do
begin
ScanLinePtr := bmp.Scanline[y]; // der springende Punkt!
for x := 0 to Pred(Bmp.Width) do
begin
Pixel := PRgbTripleArray(ScanLinePtr)^[x];
r := r + Pixel.Red;
g := g + Pixel.Green;
b := b + Pixel.Blue;
end;
end;
Resolution := (bmp.Width * bmp.Height);
r := r div Resolution;
g := g div Resolution;
b := b div Resolution;
Result := RGB(r, g, b);
finally
bmp.Free;
wic.Free;
end;
end;
|
|
Zitat
|