Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verschieden Dimensionale Arrays und Move (https://www.delphipraxis.net/96825-verschieden-dimensionale-arrays-und-move.html)

Neutral General 31. Jul 2007 14:10


Verschieden Dimensionale Arrays und Move
 
Hi,

Ich habe im Moment folgendes:

Delphi-Quellcode:
type
  TDawnColor = packed record
    case Integer of
      0: (Value: Cardinal);
      1: (R, G, B, A: Byte);
  end;
  TDawnPixels = Array of Array of TDawnColor;

var
  Fpixels: TDawnPixels;
  data: Array of Cardinal;

begin
  //
  SetLength(data,FWidth*FHeight);
  Move(FPixels[0],data[0],SizeOf(Cardinal)*FWidth*FHeight);
  //
end;
Jedoch werden die Daten nachweislich nicht richtig übertragen. Wenn ich das ganze male kommt etwas schwares dabei raus mit ein paar bunten pünktchen dazwischen. Es müsste eigentlich eine einfarbige Fläche sein..

FPixels[0,0] oder FPixels statt FPixels[0] hab ich schon getestet, bringt aber nicht wirklich was...

Gruß
Neutral General

Hawkeye219 31. Jul 2007 14:20

Re: Verschieden Dimensionale Arrays und Move
 
Hallo Michael,

ein dynamisches zweidimensionales Array belegt keinen zusammenhängenden Bereich im Speicher. Es ist vielmehr eine Liste von Zeigern, die auf Vektoren verweisen.

Gruß Hawkeye

Neutral General 31. Jul 2007 14:36

Re: Verschieden Dimensionale Arrays und Move
 
Mit anderen Worten: Ich kanns mit Move vergessen...(?)

marabu 31. Jul 2007 15:04

Re: Verschieden Dimensionale Arrays und Move
 
Hallo Michael,

du kannst Move() verwenden, aber für jeden Vektor einzeln. Vektoren sind die arrays auf der untersten Ebene - die keine weiteren subarrays enthalten.

Grüße vom marabu

Neutral General 31. Jul 2007 15:09

Re: Verschieden Dimensionale Arrays und Move
 
Hi,

Also ich hab das jetzt so verstanden:

Delphi-Quellcode:
Move(FPixels[0],data[0],FWidth*4);
Move(FPixels[0,0],data[FWidth-1],FHeight*4);
Was aber auch nicht 100%ig funktioniert.. zuerst FPixels[0,0] hab ich auch schon probiert. Hab ich da noch einen Denkfehler drin?

marabu 31. Jul 2007 15:22

Re: Verschieden Dimensionale Arrays und Move
 
Ich könnte mir sowas vorstellen:

Delphi-Quellcode:
begin
  SetLength(data, FWidth * FHeight);
  for i := Low(FPixels) to High(FPixels) do
    Move(FPixels[i, 0], data[i * FHeight], SizeOf(Cardinal) * FWidth);
end;
Jenachdem wie du das 2D-Array organisiert hast, musst du eventuell FHeight und FWidth vertauschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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 by Thomas Breitkreuz