Delphi-PRAXiS
Seite 6 von 8   « Erste     456 78      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farbwert zu Dezimal (https://www.delphipraxis.net/200198-farbwert-zu-dezimal.html)

EWeiss 29. Mär 2019 13:09

AW: Farbwert zu Dezimal
 
kommst du denn jetzt in beide else zweige?

gruss

Klaus01 29. Mär 2019 13:17

AW: Farbwert zu Dezimal
 
Ja, aber mit dem Fadingwert von 0.32 häufiger in den else Zweig.

EWeiss 29. Mär 2019 13:19

AW: Farbwert zu Dezimal
 
Zitat:

Zitat von Klaus01 (Beitrag 1429122)
Ja, aber mit dem Fadingwert von 0.32 häufiger in den else Zweig.

Ok das funktioniert nicht bei mir.

Das Array als Integer definiert.
a als Byte
_a als SmallInt

komme nie über 127
weder mit fade über 0.5 noch mit drunter.
Ich versteh es nicht.

gruss

Klaus01 29. Mär 2019 13:29

AW: Farbwert zu Dezimal
 
Je näher fading zur 1 rückt desto häufiger geht es in den else Zweig.
Bei d = 153 (f=0.6) kann _alpha nicht mehr größer als 127 werden.

alpha max = 255 und _alpha = alpha - d

Wenn man mit der Hilfsvariablen arbeitet muss alpah noch in der Berechnung angepasst werden.

Delphi-Quellcode:
                 if _alpha > 127 then
                   imgSpectrum[x,y] := c or (((alpha - d) -256) shl 24)
                 else
                   imgSpectrum[x,y] := c or ((alpha - d) shl 24);
Grüße
Klaus

Michael II 29. Mär 2019 13:37

AW: Farbwert zu Dezimal
 
Hallo EWeiss

in welcher Procedure befindet sich der hier diskutierte Code? In procedure TSpectrum.Release;? Falls Ja: Früher hast du dort SpectrumData2D[] verwendet und jetzt imgSpectrum[]?

Oder ist es eine andere Procedure - und wenn Ja, wo findet man diese in deinem Code?

Wenn es TSpectrum.Release; ist: SpectrumData2D bzw. jetzt imgSpectrum muss natürlich am Eingang zu deiner Procedure mit Daten gefüllt sein, sonst machen die Rechnereien ja gar keinen Sinn.

Zum Testen: Wie früher erwähnt: Du könntest sämtliche VB6 Prozeduren, welche etwas rechen mit dem gleichen Input abfüllen wie deine jeweils entsprechende Delphi Prozedur und dann prüfen was am Ausgang rauskommt. Nur wenn beide Versionen die gleichen Werte liefern, bist du am sicher, dass dein Programm das tut, was das Original schön längst macht ;-).

Alles wird gut.

V.a. wichtig ist, dass du Datentypen nicht mischst. Sonst meckert Delphi (zurecht) noch lange rum.

Mindestens in deiner zuerst veröffentlichten Version sind in TSpectrum.Release; sämtliche Werte im Array SpectrumData2D immer 0 (Null).
Trotzdem malt dein Programm Dinge auf den Schirm. Da stimmt also etwas beim Ablauf nicht.

Ob in deiner Version auch alle Elemente 0 sind kannst du ja leicht testen, indem du
Delphi-Quellcode:
assert( SpectrumData2D[x, y] = 0, 'Oh, nicht Null ;-)' );
einfügst.

Michael II 29. Mär 2019 13:40

AW: Farbwert zu Dezimal
 
Und noch ein mal und zum letzten Mal ;-): Die Unterscheidung a > 127 ist im Delphi Code nicht notwendig, da wir im Gegensatz zum VB Code ohne Vorzeichen arbeiten.

EWeiss 29. Mär 2019 13:41

AW: Farbwert zu Dezimal
 
Zitat:

Bei d = 153 (f=0.6) kann _alpha nicht mehr größer als 127 werden.
So sieht es besser aus ;)
Muss das nochmal genau gegen prüfen.

Dann muss die Vorgehensweise bei den anderen auch im etwa so sein.
Danke dir für die Geduld.

Zitat:

in welcher Procedure befindet sich der hier diskutierte Code? In procedure TSpectrum.Release;? Falls Ja: Früher hast du dort SpectrumData2D[] verwendet und jetzt imgSpectrum[]?
ist s immer noch SpectrumData2D wollte Klaus nur nicht vor den Kopf stoßen (habe es bei mir jedes mal geändert. kein problem.
Zitat:

Trotzdem malt dein Programm Dinge auf den Schirm. Da stimmt also etwas beim Ablauf nicht.
Was soll nicht stimmen ? Ist schon gut so.
Du musst Release von der Zeichenroutine komplett trennen.

es befindet sich dazwischen und manipuliert die Pixel mit denen die aus den Effekten errechneten werden.
So etwas wie ein Plugin innerhalb Draw!

gruss

Klaus01 29. Mär 2019 14:14

AW: Farbwert zu Dezimal
 
ein letztes update
alpha ist wieder ein Byte (ich fühl mich wohler damit)

Delphi-Quellcode:
           for y:= 0 to h do
             for x := 0 to w do
               begin

                 alpha := ((imgSpectrum[x,y] and $FF000000) shr 24) and $FF;
                 c := imgSpectrum[x,y] and $FFFFFF;

                 if d > alpha then
                   alpha := 0
                 else
                   alpha := alpha - d;

                 if alpha > 127 then
                   imgSpectrum[x,y] := c or ((alpha -256) shl 24)
                 else
                   imgSpectrum[x,y] := c or (alpha shl 24);
               end;
Grüße
Klaus

EWeiss 29. Mär 2019 16:11

AW: Farbwert zu Dezimal
 
@Klaus danke für deine Mühe und Einsatz mir zu helfen.
Habe leider noch ein anderes Problem um das zuverlässig testen zu können.

Wenn es dann mal funktioniert gibt es ein Update und die Meldung warum es nicht ging.
Vielleicht können dann andere davon etwas abschauen die ähnliche Probleme haben.

gruss

Michael II 29. Mär 2019 17:32

AW: Farbwert zu Dezimal
 
Delphi-Quellcode:
Was soll nicht stimmen ? Ist schon gut so.
Du musst Release von der Zeichenroutine komplett trennen.

es befindet sich dazwischen und manipuliert die Pixel mit denen die aus den Effekten errechneten werden.
So etwas wie ein Plugin innerhalb Draw!
Das Zeichnen der "Spektrum Daten" funktioniert.

Was in der mir vorliegenden Version nicht funktioniert
Zitat:

Was soll nicht stimmen ?
sind die Effekte. Dieser Teil macht gar nix, da der Input immer imgSpectrum=(0,...0) ist. Wenn du die Funktion Release(welcher Effekt, imgSpectrum) immer an der Stelle Release(welcher Effekt, imgSpectrum=0 ) auswertest, dann kannst du den Effekt auch weglassen.

Aufgrund von deinem
Zitat:

Was soll nicht stimmen ? Ist schon gut so.
hast du den Code offensichtlich inzwischen geändert und die Effekte werden wie du es erwartest gezeichnet. Ich gratuliere dir zum fertigen Programm :-D.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.
Seite 6 von 8   « Erste     456 78      

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