Thema: Delphi Farbwert zu Dezimal

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#66

AW: Farbwert zu Dezimal

  Alt 30. Mär 2019, 09:12
Zitat:
Sei nicht böse, aber für mich ist dieser Thread Comedy pur.
Kein Problem bin ich nicht.
Ich habe früher alles gewusst.. warum auch immer ich es heute nicht mehr weis mag dahingestellt sein spielt auch keine weitere rolle.

Du hast es gut erklärt und aufgezeigt wo die Fehler liegen und warum es falsch ist so kann ich damit leben.

Die von dir benannten Probleme sind aber mittlerweile Asbach(Vergangenheit, erledigt, behoben) da Michael mich in einer PN schon darauf aufmerksam gemacht hat.
Wenigstens ziehst du nicht über mich her ohne aufzuzeigen wo die Probleme liegen.

Trotz alledem ob Comedy oder nicht keine eurer Versuche(Wissen? ??) hat irgendeine Verbesserung gebracht. Leider.
Die werte sind weiterhin falsch.

@Klaus
Zitat:
. ein 32bit Value and $FF maskiert den 32bit auf ein Byte.
$FFCCDD01 and $FF ($000000FF) ergibt $01
Es wäre nett wenn du mir sagen würdest auf was du dich beziehst.

Zitat:
//a := (((SpectrumData2D[X, Y] and $FF000000) div $1000000) and 255);
Ergibt immer a = 0
Rein Rechnerisch oder deine Annahme
Denn das ist original von VB und die werte ändern sich ständig. (Weil nicht als Byte sondern als Long definiert)
Code:
Dim imgSpectrumData() As Long
Dim r As Long, g As Long, b As Long, a As Long
Code:
a = (((imgSpectrumData(x, y) And &HFF000000) \ &H1000000) And &HFF&)
Zitat:
d := round(Fade * 255);Fade, wenn ich es richtig sehe ist ein Single im Bereich 0 .. 1.
Also ist d (ein Integer) im Bereich 0 .. 255
Wo ist der Widerspruch? Oder das Problem

Code:
Dim d As Long
Fade ist ein property
Code:
Public Property Let Fade(ByVal fNewValue As Single)
Public Property Get Fade() As Single
Du solltest stets dir den vergleich vorher ansehen deine Berechnung erstellen und dann belegen warum etwas falsch ist, sein soll,
wenn genau das im Original alles Funktioniert was du hier als falsch unterstellst. (OK ich habe irrtümlich Byte definiert deshalb ist der wert so wie du sagst)
Keine Ahnung was das mit Comedy zu tun hat.


Zitat:
Warum?!
Wenn Du einen Byte-Wert um 8 oder mehr Bits shiftest, gleichgültig ob links oder rechts und das Ergebnis
mit "and 255" begrenzt wird das Resultat stets 0 sein.
Wurde schon lange behoben.

Ich bin davon ausgegangen das wenn die Funktion GdipCreateBitmapFromScan0 als Übergabe von Scan0 einen Pointer of PByte erwartet das es letztendlich sinnvoll wäre das Array direkt als Byte zu definieren.
Die Nachfolgenden Funktionen wie Release hatte ich zu diesen Zeitpunkt noch nicht übersetzt, konnte also zu dem Zeitpunkt nicht wissen ob der der Datentyp so korrekt ist.
Wie gesagt in VB ist eh fast alles Long.

Versuch doch mal ein Projekt zu übersetzen das zu 80 Prozent aus nur 1 DatenTyp besteht.
Das hier war insbesondere schwierig da es hier ums eingemachte ging siehe FFT.. kennst du die Datentypen nicht fällst du auf die Nase.

Zitat:
Meine Vermutung ist, dass SpectrumData2D ein Array of Array of UInt32 sein sollte und nicht ein Array of Array of Byte
Ja Vermutung nur mit deinem Cardinal in Verbindung mit Bytes a,r,g,b stürzt die Anwendung ab.

gruss

Geändert von EWeiss (30. Mär 2019 um 13:21 Uhr)
  Mit Zitat antworten Zitat