Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   pf8Bit seltsames aussehen der Palette (https://www.delphipraxis.net/188819-pf8bit-seltsames-aussehen-der-palette.html)

EWeiss 11. Apr 2016 17:35

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Zitat von Zacherl (Beitrag 1335314)
Zitat:

Zitat von EWeiss (Beitrag 1335262)
Mit dem umgedrehten Bitmap hab ich jetzt behoben.
Durch das Move jeder einzelnen Zeile dauert das aber nun ewig :)

Kannst du die aktuelle Version des Projekts nochmal anhängen?

Ja gerne doch denn ich bekomme das nicht hin.. :oops:
Kann machen was ich will die Paletten funktionieren einfach nicht!

So sollte Scope aussehen (Realtime kein Problem) und schnell genug.
Aber als Komplettansicht schlägt das fehl.

http://home.arcor.de/weiss.em/Spectr...e_12_04_16.rar

gruss

EWeiss 17. Apr 2016 21:14

AW: pf8Bit seltsames aussehen der Palette
 
Ich versuche immer noch den kram zu beschleunigen.

Delphi-Quellcode:
    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 := BuffBMP.ScanLine[BuffBMP.Height - i - 1];
//        Move(X[OffsetX], X[0], (BuffBMP.Width - OffsetX));

        for m := 0 to pred(OffsetX) do
          X[BuffBMP.Width - OffsetX + m] := 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;
Ich habe jetzt den Auskommentierten Teil in eine eigene Schleife gebunden.
Um beim zuweisen der Farben das ganze zu beschleunigen.

Delphi-Quellcode:
  for i := 0 to BuffBMP.Height - 1 do
  begin
    X := BuffBMP.ScanLine[BuffBMP.Height - i - 1];
    Move(X[OffsetX], X[0], (BuffBMP.Width - OffsetX));
  end;
Das geht relativ schnell, das Problem ist nur das bei der Übergabe der Value das Bitmap nicht gefüllt wird.
Eigentlich müsste es doch egal sein ob ich den Pointer vorher verschiebe anstatt in der Schleife zum ermitteln der Farben.

Wo ist mein Denkfehler?
In X müssten doch die richtigen Pointer liegen.
Delphi-Quellcode:
X: PByteArray;


gruss

Medium 18. Apr 2016 00:01

AW: pf8Bit seltsames aussehen der Palette
 
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.

EWeiss 18. Apr 2016 00:26

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Woher das xOffset und die Schleife mit "m" herkommen, ist mir ehrlich gesagt etwas schleierhaft gerade.
Ich habe versucht meine frühere Routine (Realzeit) hier zu verwenden.
Der XOffset diente dazu Das Bitmap von verschiedenen Seiten zu zeichnen.

Zitat:

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:
Vollkommen richtig und Danke dafür.
Durch das vorherige füllen des PByteArray ist die Geschwindigkeit nun genauso wie gewünscht.
Palette stimmt auch. War aber ein anderes Problem) ;)


gruss

Blup 18. Apr 2016 08:14

AW: pf8Bit seltsames aussehen der Palette
 
Delphi-Quellcode:
BuffBMP.Canvas.Pixels[ColumnCounter, BuffBMP.Height - 1 - i] := Value; //RGB(R, G, B);

EWeiss 18. Apr 2016 12:48

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Zitat von Blup (Beitrag 1335838)
Delphi-Quellcode:
BuffBMP.Canvas.Pixels[ColumnCounter, BuffBMP.Height - 1 - i] := Value; //RGB(R, G, B);

Danke ist mir auch gestern noch aufgefallen..
Mein Fehler!

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz