AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Circular spectrum visualizer

Circular spectrum visualizer

Ein Thema von EWeiss · begonnen am 22. Mär 2019 · letzter Beitrag vom 23. Jun 2019
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Circular spectrum visualizer

  Alt 27. Mär 2019, 21:50
Neue Version.
Wollte schon aufgeben wegen der Farben aber gut habe es gefixt!


- remove grWindow
- Add DoubleBuffer (Danke Michael II für die Idee)
- fix FarbSpectrum
- remove alte ARGB Function

fehlt noch Fade, Blur, Fire muss sehen was da noch falsch läuft.
Eventuell muss ich die Funktion direkt in die Draw Routine integrieren. (Mal sehn)

Habe die ARGB Funktion entfernt..
1. Kombination von Unsigned + Signed DateiType
2. Overflow konnte es nicht fixen (verwende jetzt meine eigene).

War Fehlerhaft bzw.. zu anfällig für Fehler
Delphi-Quellcode:
function ARGB(Alpha: Byte; Col: ColorRef): ColorRef;
begin

  if Alpha > 127 then
    Result := ColorRef(Int64(Col and $FFFFFF or (Int64(Alpha) - 256) * $1000000))
  else
  Result := Col and $FFFFFF or (Alpha * $1000000);
end;
{$ENDREGION}
Die alte Version habe ich mal oben gelassen zum vergleich.

gruss

Geändert von EWeiss (27. Mär 2019 um 22:07 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Circular spectrum visualizer

  Alt 2. Apr 2019, 11:42
Aktualisierte Version hochgeladen.
Änderungen siehe oben.

gruss
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.782 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Circular spectrum visualizer

  Alt 2. Apr 2019, 12:13
Hallo Emil,

Delphi-Quellcode:
            a := (((SpectrumData2D[x, y] and $FF000000) div $1000000) and $FF);
            a := a - d;

            c := SpectrumData2D[x, y] and $FFFFFF;

            if a > 127 then
              SpectrumData2D[x, y] := LongWord(c or ((a - 256) * $1000000))
            else
            SpectrumData2D[x, y] := LongWord(c or (a * $1000000));
a ist bei Dir als Byte definiert

Was passiert wenn d > a ist?

Es gibt ein wahrscheinlich nicht erwartetes Ergebnis.
Michael II hatte Dir dazu schon eine Lösung gepostet.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Circular spectrum visualizer

  Alt 2. Apr 2019, 12:17
Hallo Emil,

Delphi-Quellcode:
            a := (((SpectrumData2D[x, y] and $FF000000) div $1000000) and $FF);
            a := a - d;

            c := SpectrumData2D[x, y] and $FFFFFF;

            if a > 127 then
              SpectrumData2D[x, y] := LongWord(c or ((a - 256) * $1000000))
            else
            SpectrumData2D[x, y] := LongWord(c or (a * $1000000));
a ist bei Dir als Byte definiert

Was passiert wenn d > a ist?

Es gibt ein wahrscheinlich nicht erwartetes Ergebnis.
Michael II hatte Dir dazu schon eine Lösung gepostet.

Grüße
Klaus
Danke

Es ging mir erst einmal darum den Original Quelltext einzubinden.
Weil wie gesagt alle anderen aus was für gründen auch immer nicht funktioniert haben.
Die Lösung vom Michael gibt auch überall 0 zurück auch mit geänderten DatenTyp zu LongWord.

Michael II verwendet auch Byte.
Sorry nein DWORD.

gruss

Geändert von EWeiss ( 2. Apr 2019 um 12:20 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Circular spectrum visualizer

  Alt 2. Apr 2019, 12:24
Nehme ich DWord dann habe ich hier
SpectrumData2D[x, y] := LongWord(c or ((a - 256) * $1000000))

einen Integerüberlauf.
Und schon sind wir wieder beim Thema das es nicht funktioniert.

PS:
Als Byte definiert habe ich Daten im Array.
Ob sie richtig sind? Keine Ahnung. Ich sagte ja schon bekomme das nicht gebacken.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Circular spectrum visualizer

  Alt 2. Apr 2019, 13:16
Zitat:
SpectrumData2D[x, y] := LongWord(c or ((a - 256) * $1000000))
Du mischst hier Datentypen wild durcheinander. Ich hatte dir vor einigen Tagen per PN eine 'Release' gesendet, welche funktionieren sollte. [Wenn dort noch was klemmen sollte, dann schreibe mir eine PN.]

Bei deinem obigen Problem: a-256 kann - wenn du a als BYTE definiert - problematisch sein, wenn a=0.

Mein Tipp: Mische nicht BYTEs und WORDs und DWORDs. Nimm DWORD; dann wird der Code übersichtlicher, lesbarer und tut dann auch eher das, was du erwartest .
Michael Gasser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Circular spectrum visualizer

  Alt 2. Apr 2019, 13:20
Zitat:
Wenn dort noch was klemmen sollte, dann schreibe mir eine PN.
PN ist unterwegs.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz