AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

signed and unsigned types

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

n/a Beiträge
 
#1

AW: signed and unsigned types

  Alt 21. Mär 2019, 09:18
Zitat:
a := ((((Buf[dx, dy] and 4278190080) div 16777216) and 255) - d;
Das kann ich casten und gut ist.. hoffe das macht nachher keine Problem. "Buf" die Rückgabe ist Byte

a := ((Integer((Buf[dx, dy]) and 4278190080) div 16777216) and 255) - d;

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: signed and unsigned types

  Alt 21. Mär 2019, 09:31
4278190080 ist aber kein Integer...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: signed and unsigned types

  Alt 21. Mär 2019, 09:37
4278190080 ist aber kein Integer...
Ist er im ersten gecasteten wert auch nicht und da meckert der Compiler nicht mehr.

a := ((Integer((Buf[dx, dy]) and 4278190080) div 16777216) and 255) - d;
ok du meinst dann wohl so!
((Integer(c and 4278190080) div 16777216) and 255);
obwohl c ein Integer ist ? Nun gut sei's drum.. verstehe was du meinst der wert (4278190080) passt nicht in einen Integer.

gruss

Geändert von EWeiss (21. Mär 2019 um 10:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: signed and unsigned types

  Alt 21. Mär 2019, 09:48
4278190080 ist ein unsigned int, weil die Zahl zu groß ist für den Datentyp "Integer".
Wenn Buf[dx,dy] ein byte zurückgibt und du dann ein "and $FF000000" (4278190080) darauf anwendest, dann bringt dir das nichts.
Dann kannst du auch direkt "0" schreiben. Was genau hast du da vor?
Und wenn du mit Bitmasken/Bitoperationen arbeitest würde ich dir empfehlen die Hexadezimale Notation zu verwenden - die ist in dem Fall unendlich lesbarer.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: signed and unsigned types

  Alt 21. Mär 2019, 09:58
Zitat:
Und wenn du mit Bitmasken/Bitoperationen arbeitest würde ich dir empfehlen die Hexadezimale Notation zu verwenden - die ist in dem Fall unendlich lesbarer.
Hatte ich vorher.. habe es geändert um eine einheitliche Berechnung (Ansicht zu haben) durchzuführen kein Mischmasch zwischen DEZ und HEX.

Zitat:
4278190080 ist ein unsigned int, weil die Zahl zu groß ist für den Datentyp "Integer".
Habe es auf Int64 geändert so muss ich nicht konvertieren.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: signed and unsigned types

  Alt 21. Mär 2019, 10:38
Und nochmal:
Delphi-Quellcode:
// :
Buf[dx, dy] and 4278190080
Das ergibt IMMER 0 Sicher das du das willst?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: signed and unsigned types

  Alt 21. Mär 2019, 11:29
Und nochmal:
Delphi-Quellcode:
// :
Buf[dx, dy] and 4278190080
Das ergibt IMMER 0 Sicher das du das willst?
Ich versteh was du meinst.

Der Original source..
Wo es geht muss ich mich daran halten von den Datentypen mal abgesehen.
DatenTyp dafür ist Buf() As Long


Code:
        For y = 0 To h
            For x = 0 To w
                cx = x / s - o
                cy = y / h - 0.5

                r = Sqr(cx * cx + cy * cy)

                dx = (cx + o + 0.01 * cx * ((r - 1) / 0.5)) * s
                dy = (cy + 0.5 + 0.01 * cy * ((r - 1) / 0.5)) * h

                a = (((Buf(dx, dy) And &HFF000000) \ &H1000000) And &HFF&) - d

                If a < 0 Then
                    a = 0
                End If
               
                c = Buf(dx, dy) And &HFFFFFF

                If a > 127 Then
                    imgSpectrumData(x, y) = c Or ((a - 256) * &H1000000)
                Else
                    imgSpectrumData(x, y) = c Or (a * &H1000000)
                End If
            Next
        Next
Und ja ich habe das Problem das ich nicht über 0 hinwegkomme.

Ich erstelle ein leeres Image
Delphi-Quellcode:
  if GDIP_CreateBitmapFromScan0(w, rc.Bottom, w * 4, PixelFormat32bppARGB,
    PByte(imgSpectrumData[0, 0]), imgSpectrum) <> OK then
  begin
    MessageBox(0, 'Error create GDI+ bitmap', nil, 0);
    SendMessage(MainHandle, WM_DESTROY, 0, 0);
    exit;
  end;
imgSpectrumData ist als Byte definiert.. genauso wie das Array für den Buf.
Da ich aber einen Pointer übergeben muss caste ich das Byte zu PByte könnte auch Pointer nehmen.

Das imgSpectrumData ist leer und wird seltsamerweise auch nicht gefüllt das verursacht meine ganzen Probleme.

&HFF& sieht seltsam aus ist aber in DEZ 255 und in VB als Long definiert deshalb der Anhang hinter &HFF&

gruss

Geändert von EWeiss (21. Mär 2019 um 11:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:48 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