![]() |
signed and unsigned types
Zitat:
Delphi-Quellcode:
a := a + (((c and 4278190080) div 16777216) and 255);
a := (((Buf[dx, dy] and 4278190080) div 16777216) and 255) - d; gruss |
AW: signed and unsigned types
Zitat:
Gruß K-H |
AW: signed and unsigned types
Du erkennst was Singed und Unsinged ist am Datentyp.
Von daher wäre es hilfreich gewesen wenn du die Deklaration der Variablen auch gepostet hättest. Du kannst die Warnung loswerden, indem du entweder die Deklarationen vereinheitlichst oder in der Rechnung durch explizite Casts vereinheitlichst. |
AW: signed and unsigned types
Zitat:
Delphi-Quellcode:
x, y, c, w, h, a, d: Integer;
a und c sind beides Integer.. deshalb frage ich ja hier nach ;) und nun?
Delphi-Quellcode:
a := a + (((c and 4278190080) div 16777216) and 255);
gruss |
AW: signed and unsigned types
Zitat:
Delphi-Quellcode:
a := ((Integer((Buf[dx, dy]) and 4278190080) div 16777216) and 255) - d;
gruss |
AW: signed and unsigned types
4278190080 ist aber kein Integer...
|
AW: signed and unsigned types
Zitat:
Delphi-Quellcode:
a := ((Integer((Buf[dx, dy]) and 4278190080) div 16777216) and 255) - d;
ok du meinst dann wohl so!
Delphi-Quellcode:
((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 |
AW: signed and unsigned types
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. |
AW: signed and unsigned types
Zitat:
Zitat:
gruss |
AW: signed and unsigned types
Und nochmal:
Delphi-Quellcode:
Das ergibt IMMER 0 :!: Sicher das du das willst?
// :
Buf[dx, dy] and 4278190080 |
AW: signed and unsigned types
Zitat:
Der Original source.. Wo es geht muss ich mich daran halten von den Datentypen mal abgesehen. DatenTyp dafür ist Buf() As Long
Code:
Und ja ich habe das Problem das ich nicht über 0 hinwegkomme.
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 Ich erstelle ein leeres Image
Delphi-Quellcode:
imgSpectrumData ist als Byte definiert.. genauso wie das Array für den Buf.
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; 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 |
AW: signed and unsigned types
Das Problem liegt hier..
Delphi-Quellcode:
PByte(imgSpectrumData[0, 0])
Habe mal eine Variable als PByte definiert.
Delphi-Quellcode:
so ist scan0 Nil.
scan0: PByte;
scan0 := PByte(imgSpectrumData[0, 0]);
Delphi-Quellcode:
so ist der Pointer scan0 gefüllt nur dann bekomme ich Fehlermeldungen..
scan0 := PByte(imgSpectrumData]);
In VB werden die Arrays mit übergeben und dort funktioniert es. Hmmm was ist nun richtig. gruss |
AW: signed and unsigned types
Versuche es mal so:
Delphi-Quellcode:
scan0 := PByte(@imgSpectrumData[0, 0]);
|
AW: signed and unsigned types
Zitat:
Ist das gleiche als wenn ich es ohne Array übergebe. Vermute bald das es an etwas anderem liegt. (Integer für das waveInOpen als ShortInt auslegen) Integer ist ja 32Bit. Dann muss ich viel ändern. ;) grrrr.. gruss |
AW: signed and unsigned types
Zitat:
Sind die Elemente von imgSpectrumData[] nur als Byte deklariert, so ist das zu wenig Speicher. Sollte imgSpectrumData[] als mehrdimensionales dynamisches Array deklariert sein, so ist der Speicherbereich noch nicht mal zusammenhängend. |
AW: signed and unsigned types
Zitat:
Delphi-Quellcode:
Das würde mehr Sinn machen, glaube ich.
PByte(@imgSpectrumData[0, 0])
|
AW: signed and unsigned types
Zitat:
Sage nicht das es falsch ist. ;) Nun dann muss ich diese Fehler wohl beheben. Zitat:
Delphi-Quellcode:
if GDIP_CreateBitmapFromScan0(w, rc.Bottom, w * 4
Wie würdest du denn dann das Array definieren wenn nicht mit Byte? Wenn mit Pbyte dann ist das komplette Array "NIL" nach dem erstellen des Image. Siehe Pbyte.png Und bei der ersten abfrage kracht es dann natürlich. Siehe crash.png Edit:
Delphi-Quellcode:
a := (((int64(imgSpectrumData[x, y]) and 4278190080) div 16777216) and 255);
wäre möglich aber dann kracht es hier!
Delphi-Quellcode:
imgSpectrumData[x, y]^ := c or (a * 16777216);
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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