Da sind dir irgendwo auf dem Weg die gepufferten Scanlines abhanden gekommen, und statt dessen in das PByteArray verwurschtelt, dass ein ganz anderes Ziel verfolgt.
Ich hätte da jetzt eher sowas in der Art gesehen:
Delphi-Quellcode:
var
x:
array of PByteArray;
begin
...
SetLength(x, BuffBMP.Height);
for i := 0
to BuffBMP.Height - 1
do
x[i] := BuffBMP.Scanline[BuffBMP.Height-i-1];
for i := 0
to BuffBMP.Height - 1
do
begin
Value := round(Sqrt(Sqrt(Buffer[i + 1]) * 4 * BuffBMP.Width));
if bScanLines
then
begin
QueryPerformanceCounter(timeDraw0);
X[i][ColumnCounter] := Value;
QueryPerformanceCounter(timeDraw1);
timeDraw := timeDraw + (timeDraw1 - timeDraw0);
end
else
begin
QueryPerformanceCounter(timeDraw0);
BuffBMP.Canvas.Pixels[ColumnCounter, BuffBMP.Height - i] := Value;
//RGB(R, G, B);
QueryPerformanceCounter(timeDraw1);
timeDraw := timeDraw + (timeDraw1-timeDraw0);
end;
end;
Woher das xOffset und die Schleife mit "m" herkommen, ist mir ehrlich gesagt etwas schleierhaft gerade. Meiner Meinung nach braucht es die nicht, oder der Codeschnipsel war nicht ausreichend um die Notwendigkeit bzw. den Nutzen zu demonstrieren.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)