Delphi-PRAXiS
Seite 3 von 4     123 4      

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)

Neutral General 11. Apr 2016 10:24

AW: pf8Bit seltsames aussehen der Palette
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1335219)
Zitat:

Zitat von Neutral General (Beitrag 1335215)
Nagut dann eben 8-Bit. Sollte aber vom Prinzip genauso funktionieren.

Sorry nein weil es nicht verdreht ist und eine Rotation von 90 Grad in dem Fall nichts bringt.
Es ist umgekehrt.

Zitat:

Okay war bei Scanline nicht das Problem dass du in erster Linie vertikal zeichnen musst?
Ich zeichne vertikal.

gruss

Du verstehst mich scheinbar nicht.
Die Tatsache DASS du vertikal zeichnest bzw. zeichnen musst macht es ja so langsam weil du mit Scanline ja nur zeilenweise Zeichnen kannst.
Wenn du jetzt aber dein Bitmap um 90° drehst kannst du horizontal malen und Scanline effektiv benutzen. (siehe Anhang)
Damit es dann auf dem Bildschirm wieder richtig rum ist musst du das Bitmap da dann (z.B.) per PlgBlt zurückdrehen.

EWeiss 11. Apr 2016 10:36

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Du verstehst mich scheinbar nicht.
Kann sein..
In dem vorherigen Beispiel mache ich es auch nicht anders (falsch oder richtig das wäre dann die frage)
bin mir jetzt nicht so sicher weil hier mit Scanline die RGB Farben übergeben werden. Also eine ganz andere Sache.

Hier ist nochmal mein Code.. Variablen anders vergeben zum besseren Verständnis.
Ok zeichne Horizontal..

Delphi-Quellcode:
x: PByteArray;
Value: Byte;
....

Delphi-Quellcode:
      Value := round(Sqrt(Sqrt(Buffer[i + 1]) * 3 * BuffBMP.Width));

      if bScanLines then
      begin
        QueryPerformanceCounter(timeDraw0);
        k := BuffBMP.Height - i - 1;
        x := BuffBMP.ScanLine[k];

        Move(x[OffsetX], x[0], (BuffBMP.Width - OffsetX));

        x[BuffBMP.Width - OffsetX] := Value;

        QueryPerformanceCounter(timeDraw1);
        timeDraw := timeDraw + (timeDraw1-timeDraw0);
      end
Das Problem das ich habe ist das mein Bitmap dann umgekehrt nicht verdreht ist.
Also das was eigentlich vorne sein soll ist hinten..
Da nutzt auch ein drehen um 90 grad nichts.

Deine Vermutung das ich nicht vertikal zeichne mag das Problem mit meiner Performance sein.
Dem will ich nicht widersprechen.

EDIT:
Ok denke verstehe was du meinst.
Ich soll das leere Bitmap vorher drehen dann mit ScanLine Horizontal zeichen
und anschließend wieder zurück drehen.

Das kann ich aber nicht machen weil beim Fortschritt direkt gezeichnet wird. (sichtbar)

gruss

himitsu 11. Apr 2016 12:10

AW: pf8Bit seltsames aussehen der Palette
 
Man kann alle Zeilenanfänge auch vorher einmal per Scanline besorgen und zwischenspeichern.
Mit einem eindimensionalen Array, hätte man dann eine zweidimensionale Matrix (ZeilenArray-Offset + Spalten-Offset).

Alle Zeilen liegen im Speicher hintereinander, allerdings oft gerne von unten nach oben
und im Speicher ausgerichtet (Alignment).
Heißt, daß man im Grunde nur einen Anfang bräuchte und die Pixelposition ausgerechnet werden könnte.


Oder, falls es hier geht und praktikabel ist, man dreht seine Zeichenfunktion, damit sie eben nicht Spalten, sondern Zeilenweise arbeitet.

EWeiss 11. Apr 2016 12:23

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Oder, falls es hier geht und praktikabel ist, man dreht seine Zeichenfunktion, damit sie eben nicht Spalten, sondern Zeilenweise arbeitet.
Ja wie von Michael vorgeschlagen.
Ist ohne ein zusätzliches Bitmap nicht ausführbar und zudem möchte ich ja den Fortschritt der Analysierung gleichzeitig visualisieren.

Zitat:

Man kann alle Zeilenanfänge auch vorher einmal per Scanline besorgen und zwischenspeichern.
Mit einem eindimensionalen Array, hätte man dann eine zweidimensionale Matrix (ZeilenArray-Offset + Spalten-Offset).
Da weiß ich nicht wie das gehen soll.
Die x Position bekomme ich ja erst durch die Value.
Delphi-Quellcode:
Value := round(Sqrt(Sqrt(Buffer[i + 1]) * 3 * BuffBMP.Width));


Danke.

gruss

Neutral General 11. Apr 2016 12:28

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Zitat von EWeiss (Beitrag 1335255)
Zitat:

Oder, falls es hier geht und praktikabel ist, man dreht seine Zeichenfunktion, damit sie eben nicht Spalten, sondern Zeilenweise arbeitet.
Ja wie von Michael vorgeschlagen.
Ist ohne ein zusätzliches Bitmap nicht ausführbar und zudem möchte ich ja den Fortschritt der Analysierung gleichzeitig visualisieren.

himitsu meint was anderes als ich. Bei mir wird das Bitmap gedreht und pro Zeile 1 der vertikalen Linie gezeichnet.
Himitsu schlägt vor das Bitmap so zu lassen wie es ist, aber eben nicht Linie für Linie vertikal zu zeichnen sondern zeilenweise von oben nach unten jeweils 1 Pixel jeder Linie zu zeichnen.

EWeiss 11. Apr 2016 12:31

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Himitsu schlägt vor das Bitmap so zu lassen wie es ist, aber eben nicht Linie für Linie vertikal zu zeichnen sondern zeilenweise von oben nach unten jeweils 1 Pixel jeder Linie zu zeichnen.
Ach so hab es falsch verstanden.
Destotrotz brauche ich die Aktuelle (x) in dem Fall dann die Y Position welche ich erst durch die Value erhalte.

Oder?

gruss

himitsu 11. Apr 2016 12:36

AW: pf8Bit seltsames aussehen der Palette
 
Nee nee :zwinker:, er hat die Zeichenfläche gedreht und nach dem Zeichnen halt nochmal das fertige Bild.

Man kann aber manchmal auch das Zeichnen drehen und nicht das Blatt.

Es ginge auch mitten drinnen, das Drehen MSDN-Library durchsuchenSetWorldTransform,
allerdings nicht hier, da hier ja an Allem vorbei direkt in den Speicher gegangen wird.

EWeiss 11. Apr 2016 12:45

AW: pf8Bit seltsames aussehen der Palette
 
Hatte eigentlich gedacht es wäre schwieriger die RGB Werte zu analysieren.
So kann man sich irren.

In Realzeit wo nur eine Zeile ausgelesen und dann direkt gezeichnet wird ist das kein Problem
aber alles in einem Zug geht ganz schön auf die Geschwindigkeit beim einlesen.
Na ja wer hatte das gedacht. ;)

Bin wohl zu blöd dafür.
Sollte mich erst noch etwas mehr mit der eigentlichen Materie auseinandersetzen (ScanLIne) ;)

EDIT:
Mit dem umgedrehten Bitmap hab ich jetzt behoben.
Durch das Move jeder einzelnen Zeile dauert das aber nun ewig :)

gruss

Zacherl 11. Apr 2016 17:24

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

himitsu 11. Apr 2016 17:34

AW: pf8Bit seltsames aussehen der Palette
 
Also intern lässt du dein Bild einfach im Hochformat.
Da kannst du auch ganz einfach verschieben, da dort ja komplette Scanlines kopiert/verschoben werden können.

Beim vertikal Scrollen wird in jeder Scanline der Inhalt um ein/paar Pixel nach links kopiert.

Und dann nur für die Ausgabe entweder per PlgBlt das Bild drehen und anzeigen,
oder über SetWorldTransform die Anzeige (das DC/TCanvas) drehen und dein Bild da im Hochformat rein malen.

Und "Anzeigen" auch immer nur den sichtbaren Bereich des internen Bildes.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.
Seite 3 von 4     123 4      

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