AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Unterschied zwischen dynamischen und statischen Array ??
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied zwischen dynamischen und statischen Array ??

Ein Thema von Corpsman · begonnen am 11. Mai 2007 · letzter Beitrag vom 11. Mai 2007
 
Benutzerbild von himitsu
himitsu

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

Re: Unterschied zwischen dynamischen und statischen Array ??

  Alt 11. Mai 2007, 19:07
dynamische Arrays sind Zeiger, demnach sind die Unterarrays dieses auch


c: Array Of Array Of Array Of byte;
Delphi-Quellcode:
type c2 = Array Of byte;
type c1 = Array Of c2;
var c: Array Of c1;
die ganzen unterarrays (c2) liegen also beim dynamischen Array nicht hintereinander, da für jedes dynamische array ein eigener Speicherblock resserviert wird.
Stell dir C einfach so vor:
Delphi-Quellcode:
type c2 = Array Of byte;
type c1 = Array Of Pointer{@c2};
var c: Array Of Pointer{@c1};
demnach ist @c[0, 0, 0] nur ein Zeiger auf c[0, 0, 0] bis c[0, 0, ende].
du ließt also nur einen ArrayTeil aus, nämlich c[0, 0] und nachfolgend 'ne Menge Bytes, welche nicht zu deinem Array gehören müssen (halt "undefinierten" Speicher).


[add]
wenn du eine dynamisch Größe brauchst, dann kommst du am einfachsten wenn du nur ein dynamisches Array nimmst und dessen Speicher selber einteilst.

z.B.: (ungetestet, aber ich denk mal es stimmt)
Delphi-Quellcode:
Function LoadAplhaSourceTexture(Maskname, Filename: String): Gluint;
Var
  a: packed Array Of Record r, g, b, a: Byte; end;
  i, j: Integer;
  b, b2: Tbitmap;
const
  x = 128;
  y = 128;
Begin
  b2 := TBitmap.create;
  b2.LoadFromFile(Filename);
  b := TBitmap.create;
  b.LoadFromFile(Maskname);
  setlength(c, x * y);
  For i := 0 To high(a) Do
    For j := 0 To high(c[0]) Do Begin
      a[j * y + i].r := getrvalue(b2.canvas.pixels[i, y - 1 - j]);
      a[j * y + i].g := getgvalue(b2.canvas.pixels[i, y - 1 - j]);
      a[j * y + i].b := getbvalue(b2.canvas.pixels[i, y - 1 - j]);
      If b.Canvas.pixels[i, y - 1 - j] = clblack Then a[j * y + i].a := 255
      Else a[j * y + i].a := 0;
    End;
  glGenTextures(1, @Result);
  glBindTexture(GL_TEXTURE_2D, Result);
  glEnable(GL_TEXTURE_2D);
  glTexParameteri(gl_texture_2d, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
  glTexParameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  glTexParameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  gluBuild2DMipmaps(gl_Texture_2d, GL_RGBA, x, y, GL_RGBA, GL_UNSIGNED_BYTE, @a[0]);
  a := nil; // SetLength(a, 0);
  b.free;
  b2.free;
End;
PS: high(a) + 1 = Length(a)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


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 13:12 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