Forum: Multimedia
Delphi
by Amateurprofi,
12. Mai 2021
Ja, außer dass die vor dem eigentlichen "Zählen" die Daten aus der Bitmap in ein Array kopieren.
Forum: Multimedia
Delphi
by Amateurprofi,
11. Mai 2021
Meine Assembler-Routinen arbeiten so:
Bei der 32Bit-Version werden für eine Zeile die R, G, B Werte in 32-Bit Registern summiert.
Ein Überlauf kann also frühestens dann auftreten, wenn die Bitmap breiter ist als High(Cardinal)/255 = 16843009 Pixel.
Die Summen je Zeile werden dann in UInt64-Variablen summiert.
Bei der 64Bit-Version werden die Summen der R,G,B Werte in 64Bit-Registern gebildet ...
Forum: Multimedia
Delphi
by Amateurprofi,
11. Mai 2021
@KodeZwerg:
In #16 wurde in den Raum geworfen, ob man nicht einfach ein Resize auf 1x1 Pixel machen kann.
Ich hab das mal geprüft und in meiner Funktion TestGetAvgColor; vor dem Bmp.Free folgendes eingefügt:
T3:=GetTickCount;
Bmp2:=TBitmap.Create;
Bmp2.PixelFormat:=pf24Bit;
Bmp2.SetSize(1,1);
SetRect(R,0,0,1,1);
Forum: Multimedia
Delphi
by Amateurprofi,
11. Mai 2021
Hallo KodeZwerg:
Ich hab dir mal etwas zusammengestoppelt.
Aufruf mit GetAvgColor(Dateiname) oder GetAvgColor(Bitmap)
Mit TestGetAvgColor; hab ich das Ergebnis und die Performance getestet und mit der Funktion aus #3 verglichen.
Die zurückgegebenen Durchschnittsfarben sind identisch, die Ausführungszeiten sind dagegen höchst unterschiedlich.
FUNCTION AvgColor(P,LO,W,H:NativeInt):TColor;...