AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mehrdimensionales Array variable auslegen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrdimensionales Array variable auslegen

Ein Thema von EWeiss · begonnen am 24. Apr 2009 · letzter Beitrag vom 24. Apr 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#11

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 13:19
[info] ... ich editiere wohl zuviel (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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 13:20
Zitat von himitsu:
[info] ... ich editiere wohl zuviel (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.
hmm wird als pointer übergeben kracht aber.
MoveMemory(@ia, pAddr, nImageSize); EDIT:
Delphi-Quellcode:
  SetLength(ia, 768);
  For IntI := 0 to High(ia) do
    SetLength(ia[IntI], nHeight+1);
auch die version bringt das Prog zum absturz.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#13

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 13:34
nein, das dynamische Array selber läuft delphiintern über einen Pointer

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:
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));
und dein 2-Dimensionales sieht intern etwa so aus
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));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 13:45
Danke für die erklärung
Nur wie kann ich den Fehler jetzt beheben ?

Habe testweise mal den pointer "ia" so übergeben.
MoveMemory(@ia[0,0], pAddr, nImageSize); Dann springt er nicht mehr in die System.pas bringt mir aber einen irregulären wert anstelle von
Delphi-Quellcode:
  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;
ia[(dx * 3) sollte 3 sein beim ersten durchlauf
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#15

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 14:00
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 14:05
Zitat von himitsu:
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.

Dann muss ich mal sehn wie ich das hinbekomme.

Danke.

Gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 14:24
Zitat von himitsu:
[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)
Ein VarArray (was ja eigentlich ein SafeArray ist, was wiederum bspw. VB verwendet) ist mir aber zuerst eingefallen. Sollte man vielleicht noch mal genauer überlegen, hängt natürlich von der Verwendung ab.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 14:46
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
Miniaturansicht angehängter Grafiken
1_936.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#19

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 14:48
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

Re: Mehrdimensionales Array variable auslegen

  Alt 24. Apr 2009, 15:03
Mir fällt im moment auch nichts ein wie ich sie sonst übergeben kann.
Komme um ein array nicht herum.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz