![]() |
Mehrdimensionales Array variable auslegen
Wie kann ich das Array variabel auslegen?
Delphi-Quellcode:
Das ich die werte also zur laufzeit ändern kann.
ia: array [0..767, 0..100] of byte;
gruss Emil |
Re: Mehrdimensionales Array variable auslegen
Als dynamischen Array:
Delphi-Quellcode:
oder
ia: Array of Array of Byte;
Delphi-Quellcode:
Type
ByteArray = Array of Byte; ... ia: array of ByteArray; |
Re: Mehrdimensionales Array variable auslegen
Zitat:
sorry wenn die frage was dumm daher kommt. Danke schön .. gruss Emil |
Re: Mehrdimensionales Array variable auslegen
Delphi-Quellcode:
SetLength( ia, 100);
|
Re: Mehrdimensionales Array variable auslegen
Delphi-Quellcode:
ia = Array of Array of Byte;
// oder einfach nur ia = Array of {Types.}TByteDynArray;
Delphi-Quellcode:
// ia: Array[0..767, 0..100] of Byte;
SetLength(ia, 768); For i := 0 to High(ia) do SetLength(ia[i], 101); // oder SetLength(ia, 768, 101); |
Re: Mehrdimensionales Array variable auslegen
Zitat:
Das ist was ich nicht verstehe... in dem zusammenhang
Delphi-Quellcode:
länge zuweisen..
var
ia : array of byte
Delphi-Quellcode:
Habe hier aber 2 einträge ..
Setlength(ia, 100);
Delphi-Quellcode:
Muss ja in dem fall wissen welcher seite ich den neuen wert zuweise.
ia: array [0..767, 0..100] of byte;
gruss Emil |
Re: Mehrdimensionales Array variable auslegen
Zitat:
Danke schön. EDIT: warum dann einen wert mehr ? aus 767 wird 768 ? gruss Emil |
Re: Mehrdimensionales Array variable auslegen
Nein Heigh ermittelt die obere Grenze des 1. Wertes
|
Re: Mehrdimensionales Array variable auslegen
[info] hab oben was editiert :angel2:
vielleicht fällst es so besser auf, wenn man das trennt ... ergibt Beides das Selbe
Delphi-Quellcode:
und nu erkennt man auch, warum man es wie mit SetLength bearbeiten kann.
ia: Array[0..767, 0..100] of Byte;
ia: Array[0..767] of Array[0..100] of Byte; PS: hier kann man natürlich auch jedem Unterarray eine eigene Länge verpassen (nicht alle Arrays der selben Ebene müssen gleich groß sein) [add] Zitat:
[add2] hier nochmal das Ganze mit 3 Ebenen ... dürfte do dann hoffentlich klarer werden lassen
Delphi-Quellcode:
ia: Array[0..99, 0..199, 0..299] of Byte;
ia: Array[0..99] of Array[0..199] of Array[0..299] of Byte; ia: Array of Array of Array of Byte; SetLength(ia, 100, 200, 300); SetLength(ia, 100); For i1 := 0 to High(ia) do Begin { 0 to Length(ia) - 1 } SetLength(ia[i1], 200); For i2 := 0 to High(ia[i1]) do { 0 to Length(ia[i1]) - 1 } SetLength(ia[i1, i2], 300); // SetLength(ia[i1][i2], 300); End; |
Re: Mehrdimensionales Array variable auslegen
Hab es jetzt so gemacht..
Delphi-Quellcode:
var
ia : Array of Array of byte;
Delphi-Quellcode:
jetzt springt er in System.pas rein und meldet
nHeight:= PicBB.Height;
nImageSize:= (256*nHeight)*3; SetLength(ia, 768, nHeight + 1);
Delphi-Quellcode:
Zugriffsverletzng .. schreiben von Adresse.
function LoadResString(ResStringRec: PResStringRec): string;
Übergebe ich das Array normal
Delphi-Quellcode:
dann funktioniert es.
ia: array [0..767, 0..100] of byte;
gruss Emil |
Re: Mehrdimensionales Array variable auslegen
[info] ... ich editiere wohl zuviel :lol: (siehe oben bei [add2])
aber du weißt, daß dynamische Arrays Pointer sind? bei Array[x..y] of Array[x..y] of liegen die einzelnen werte im Speicher alle als Schlange hintereinander, wärend beim dynamischen Array in den Oberen Ebenen nur Zeiger auf die Arrays liegen und die Werte somit versteut ind nicht schön hintereinander rumliegen. |
Re: Mehrdimensionales Array variable auslegen
Zitat:
Delphi-Quellcode:
EDIT:
MoveMemory(@ia, pAddr, nImageSize);
Delphi-Quellcode:
auch die version bringt das Prog zum absturz.
SetLength(ia, 768);
For IntI := 0 to High(ia) do SetLength(ia[IntI], nHeight+1); gruss Emil |
Re: Mehrdimensionales Array variable auslegen
nein, das dynamische Array selber läuft delphiintern über einen Pointer :warn:
bei einem 1-dimensionalem Array kann man das leicht beheben, indem man diesen Zeiger entsprechend (de)referenziet, aber bei mehrdimensionalen Arrays hast du so nur Einfluß auf den Pointer der 1. Ebene und nicht auf die der Drunterliegenden. ein dynamisches Array ist wie ein String/AnsiString ein statisches eher wie ein ShortString/String[x] oder
Delphi-Quellcode:
record
element0, element1, .... elementN: Byte; end;
Delphi-Quellcode:
und dein 2-Dimensionales sieht intern etwa so aus :freak:
staticArray = record
element0, element1, .... elementN: Byte; end; intDynamicArray = record Header: record; Referenzzähler: Elementanzahl: Integer; end; element0, element1, .... elementN: Byte; end; dynamicArray = (@intDynamicArray + SizeOf(Header));
Delphi-Quellcode:
intDynamicArrayEbene1 = record
Header: record; Referenzzähler: Elementanzahl: Integer; end; element0, element1, .... elementN: Byte; end; intDynamicArray = record Header: record; Referenzzähler: Elementanzahl: Integer; end; element0, element1, .... elementN: je (@intDynamicArrayEbene1 + SizeOf(Header)); end; dynamicArray = (@intDynamicArray + SizeOf(Header)); |
Re: Mehrdimensionales Array variable auslegen
Danke für die erklärung ;)
Nur wie kann ich den Fehler jetzt beheben ? Habe testweise mal den pointer "ia" so übergeben.
Delphi-Quellcode:
Dann springt er nicht mehr in die System.pas bringt mir aber einen irregulären wert anstelle von
MoveMemory(@ia[0,0], pAddr, nImageSize);
Delphi-Quellcode:
ia[(dx * 3) sollte 3 sein beim ersten durchlauf
MoveMemory(@ia[0,0], pAddr, nImageSize);
//' Fade The Data. for dy := 0 to nHeight do begin for dx := 0 to (765 div 3) do begin b := ia[(dx * 3), dy] - 15; gibt mir aber 68000 und noch was aus. irgendwas ist da total faul. Benötige aber ein dynamisches Array weil sonst die Bitmap Dimensionen nicht mehr stimmen. Die ausgabe ist unbedingt von der aktuellen höhe des bitmap abhängig also nHeight + 1 Eine Variable kann ich in Delphi einem statischen array leider nicht übergeben. gruss Emil |
Re: Mehrdimensionales Array variable auslegen
du kannst ein mehrdimensionales dynamisches Array nicht direkt übergeben.
praktisch müßtst du dir ein temporäres eindimensionales (dynamisches) Array erstellen, darin die Daten speichern lassen und dann die Daten auf dein mehrdimensionales Array umkopieren. Oder du kannst die Daten stückchenweise speichern lassen (falls das die Speicherfunktion unterstützt) und speichst so jedes UnterArray einzeln ab. [add] wenn der Variant die ArrayDaten nicht so dermasen krank serialisieren würde, hätte man dieses auch infach mißbrauchen können (aber dort werden die Ebenen leider in umgekehrter Reinfolge abgelegt) |
Re: Mehrdimensionales Array variable auslegen
Zitat:
Dann muss ich mal sehn wie ich das hinbekomme. :wall: Danke. Gruss Emil |
Re: Mehrdimensionales Array variable auslegen
Zitat:
|
Re: Mehrdimensionales Array variable auslegen
Liste der Anhänge anzeigen (Anzahl: 1)
Mein Problem ist das hier siehe Bild.
Wenn die dimension des Bitmaps das im array festgelegt wird nicht stimmt wird die vis nicht richtige dargestellt. Da der Player mit eigenen Skins ausgelegt ist die größe des Vis Window nicht immer gleich. Schwierig das Thema und keine lösung in sicht ;) gruss Emil |
Re: Mehrdimensionales Array variable auslegen
wie gesagt, ich hatte ja grad gestern bezüglich meiner XML-Serialisierung damit zu kämpfen ...
Delphi-Quellcode:
z: array of array of Byte;
z[0, 0] := 00; z[0, 1] := 01; z[0, 2] := 02; z[1, 0] := 10; z[1, 1] := 11; z[1, 2] := 12; // so sind ja die Bilddaten gespeichert 00 01 02 10 11 12 // so würden sie aber in einem Variant/SafeArray 00 10 01 11 02 12 |
Re: Mehrdimensionales Array variable auslegen
Mir fällt im moment auch nichts ein wie ich sie sonst übergeben kann.
Komme um ein array nicht herum. gruss Emil |
Re: Mehrdimensionales Array variable auslegen
Zitat:
|
Re: Mehrdimensionales Array variable auslegen
Zitat:
|
Re: Mehrdimensionales Array variable auslegen
jupp, möchte er, also er kopiert das BitMap in ein Array bearbeitet es und kopiert es dann wieder zurück.
Aber da könnte man doch eigentlich ein "virtuelles" Array direkt über das Bitmap legen :gruebel: Zitat:
und bei meier XML-Serialisierung lese ich das SaveArray direkt aus und wandle es um (wenn ich da für jeden einzelnen Eintrag über die Variant-Funktionen gehn würde, wäre das nicht unbedingt effektiv :stupid: ) |
Re: Mehrdimensionales Array variable auslegen
Zitat:
Zitat:
|
Re: Mehrdimensionales Array variable auslegen
haben gerade etwas PNt und ich hab auch mal einiges zum "virtuellen" Array mitgeschickt :angle:
[ot]OK, ich hab den Inhalt ja interpretiert und dann die Werte einzeln auf eigene Unter-Nodes verteilt :stupid: (siehe meine letzer Post in himXML) |
Re: Mehrdimensionales Array variable auslegen
Zitat:
Natürlich auch Sirius für seine Anregungen. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 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