![]() |
AW: 2 Dimensionales Array übergeben
Liste der Anhänge anzeigen (Anzahl: 1)
Funktion um ein 2D ByteArray in ein 1D ByteArray zu konvertieren:
Delphi-Quellcode:
Test:
type
TArray2D = Array of Array of Byte; TArray1D = Array of Byte; function Array2DTo1D(AArray: TArray2D): TArray1D; var y,x: Integer; n: Integer; begin SetLength(Result, Length(AArray) * Length(AArray[0])); n := 0; for y := 0 to High(AArray) do begin for x := 0 to High(AArray[y]) do begin Result[n] := AArray[y,x]; inc(n); end; end; end;
Delphi-Quellcode:
Am Ende der Testmethode sehen die Arrays aus wie im Anhang
procedure TForm1.FormCreate(Sender: TObject);
var arr2: TArray2D; arr1: TArray1D; y,x: Integer; begin // Arr2 mit Testdaten befüllen SetLength(arr2, 3, 3); for y := 0 to High(arr2) do for x := 0 to High(arr2[y]) do arr2[y,x] := random(100); // arr2 in 1D Array konvertieren arr1 := Array2DTo1D(arr2); end; |
AW: 2 Dimensionales Array übergeben
Kann die also nachher als normale 2 Dimensionale Arrays weiter behandeln?
Oder ändert sich da was. Danke übrigens für deine Arbeit. gruss |
AW: 2 Dimensionales Array übergeben
Weiß nicht genau was du alles noch machst.
Aber in der Theorie kannst du dein Array nur für den Aufruf in ein 1D konvertieren. Dein 2D-Array kannst du ja behalten und weiterhin benutzen, wenn du das danach noch brauchst. |
AW: 2 Dimensionales Array übergeben
Zitat:
Wenn ich dieses nun in einem normalen Array lege kann ich doch nicht mehr auf dieses Array 2 Dimensional zugreifen. Verstehe ich irgendwie nicht. Hmmm…. sieht auf jeden fall besser aus wie vorher.. Danke nochmal. gruss |
AW: 2 Dimensionales Array übergeben
Liste der Anhänge anzeigen (Anzahl: 1)
Nein, du kannst nicht mehr 2 dimensional darauf zugreifen (mit 2 Indices), aber du du kannst im Zweifelsfall so tun als ob:
Delphi-Quellcode:
Ergibt: Siehe Anhang.
// Daten aus arr1 auslesen, als wäre es 2D:
w := 3; h := 3; for y := 0 to h-1 do begin line := ''; for x := 0 to w-1 do line := line + IntToStr(arr1[y*w + x]) + ','; Memo1.Lines.Add(line); end; |
AW: 2 Dimensionales Array übergeben
Zitat:
Wie machen denn andere Leute das ich muss doch die werte auswerten können als Bsp. nochmal das hier.
Delphi-Quellcode:
Das ist ja mein Dilemma.
for x := 0 to w do
begin if (x >= h) or (y >= w) then continue; a := (((imgSpectrumData[x, y] and 4278190080) div 16777216) and 255); a := a - d; if a < 0 then a := 0; c := imgSpectrumData[x, y] and 16777215; if a > 127 then imgSpectrumData[x, y] := c or ((a - 256) * 16777216) else imgSpectrumData[x, y] := c or (a * 16777216); end; Siehe Anhang die unterschiede. Links Original. Es sollte schon genauso aussehen wie das Original. gruss |
AW: 2 Dimensionales Array übergeben
Vielleicht ne blöde frage..
Kann ich das normale Array nachdem ich es übergeben habe nicht wieder zurück in das 2 Dimensionale konvertieren. Macht das sinn? Wenn es gehen würde hast vielleicht ein Beispiel? KA ob das was bringt. Die beste Lösung wäre das 2 Dimensionale Array zusammenzuführen und dann als 2 Dimensionales zu übergeben. Also ein 2 Dimensionales zusammenhängendes Array Oder ist das quatsch. Ich brauche das 2 Dimensionale sonst ist die rechte und linke Seite bei der Visualisierung nicht synchron. Wenn ich symmetrical einstelle. Warum kann man das mit VB6 so übergeben aber mit Delphi nicht. Verstehe ich nicht. oder muss ich mir ein neues 2D Array vom erstellten Image erstellen? Wider mal sehr verworren das ganze. gruss |
AW: 2 Dimensionales Array übergeben
Mach doch einfach alles wie gehabt mit dem 2D Array.
Ausnahme: Der Aufruf von GdipCreateBitmapFromScan0. Vor dem Aufruf erstellst du dir aus deinem 2D Array ein 1D Array (Das ist eine Kopie, das 2D Array bleibt wie es ist) und übergibst das GdipCreateBitmapFromScan0. Dann funktioniert der Aufruf und all deine Berechnungen vorher und nachher kannst du ja wie gewohnt mit deinem 2D-Array machen. |
AW: 2 Dimensionales Array übergeben
Zitat:
gruss |
AW: 2 Dimensionales Array übergeben
Beschäftige dich nochmal grundlegend, wie die Daten von Bitmaps im Speicher liegen und was so Begriffe wie Stride bedeuten.
Wie ein paar Beiträge vorher richtig geschrieben, sind Bitmaps im rohen Speicher keine 2D-Arrays, sondern liegen hintereinander weg. Die nächste Zeile wird durch den Stride/Pitch angegeben. Für pures GDI+ wirst du wenig Quellen finden, aber viele .NET Quelltextbeispiele, die sich mit den Elementen aus System.Drawing beschäftigen, wären ratsam anzuschauen. Bsp.: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 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