AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi 2 Dimensionales Array übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

2 Dimensionales Array übergeben

Ein Thema von EWeiss · begonnen am 21. Mär 2019 · letzter Beitrag vom 26. Mär 2019
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 09:45
Mach es einfach nicht.
Es kann sein, dass es jetzt gerade funktioniert.
Aber es kann genauso gut sein, dass es auf ein mal aus heiterem Himmel nicht mehr funktioniert wenn du irgendwo ganz wo anders was im Code änderst, was das Speicherlayout des Prozesses etwas verändert. Und dann kracht es und du hast keine Ahnung was los ist.

Hab nochmal im CPU-Fenster ein Screenshot gemacht, der nochmal genau verdeutlicht was bei 2D Arrays passieren kann (und dann funktioniert deine Methode nicht mehr):
Angehängte Grafiken
Dateityp: png MemLayout.png (26,6 KB, 8x aufgerufen)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (25. Mär 2019 um 09:49 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 09:50
Zitat:
Mach es einfach nicht.
Ich habe es entfernt und verwende deine Funktion wie bisher ist sicherer.
Wollte es nur mal ansprechen.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: 2 Dimensionales Array übergeben

  Alt 25. Mär 2019, 10:16
Meine Funktion ist auch nicht die schnellste.
Hab sie auf Verständlichkeit ausgelegt.

Das hier ist wahrscheinlich noch ein Stück schneller + sicherer:
Delphi-Quellcode:
function Array2DTo1D(AArray: TArray2D): TArray1D;
var y, rowLen: Integer;
begin
  if Length(AArray) > 0 then
  begin
    rowLen := Length(AArray[0]);
    SetLength(Result, Length(AArray) * rowLen);
    for y := 0 to High(AArray) do
      Move(AArray[y][0], Result[y * rowLen], rowLen);
  end
  else
    SetLength(Result ,0);
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: 2 Dimensionales Array übergeben

  Alt 26. Mär 2019, 04:52
Du sagst das nichts kopiert wird.. das ist richtig!
Aber das 1 Dimensionale Array wird auf die komplette länge des 2 Dimensionalen gesetzt mehr brauche ich nicht.
Ich muss keine Bytes hin und her verschieben denn da gibt es keine.
Das 2 Dimensionale Array enthält keine es wird nur auf das Bitmap hin ausgerichtet.

Fakt ist doch das hier
ImgData2D := @SpectrumData2D[0, 0];

Die komplette Länge eines 2 Dimensionalen Arrays sich anschließend in einem 1 Dimensionalen befindet.
Wäre es nicht so würde ich das Bitmap mit dem Array gar nicht füllen und abspeichern können.
Es ist nicht das gleiche als wenn ich

@SpectrumData2D[0, 0];
direkt übergeben würde.

TBytes ist definiert in SysUtils als
TBytes = array of Byte;

gruss

Geändert von EWeiss (26. Mär 2019 um 04:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: 2 Dimensionales Array übergeben

  Alt 26. Mär 2019, 09:03

Warum mach ich mir überhaupt die Mühe, wenn ich eh nur gegen eine Wand rede?
Dann mach es so.......
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:08 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