![]() |
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 09:33 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