AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dynamischer Speicher füllen

Offene Frage von "Porter10"
Ein Thema von Porter10 · begonnen am 18. Mai 2005 · letzter Beitrag vom 27. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Porter10

Registriert seit: 18. Mai 2005
Ort: Bergisch Gladbach
6 Beiträge
 
Delphi 5 Professional
 
#1

dynamischer Speicher füllen

  Alt 18. Mai 2005, 15:33
Hallo erstmal!

Bin neu hier im Forum bei Delphipraxis! Bin vor einiger Zeit gefragt worden, ob ich ein älteres Programm bei uns der Firma übernehmen könnte! Es ist leider in Delphi geschrieben, und da ich fast keine Delphi erfahrung habe, kommt es da natürlich des öfteren zu syntax problemen!

Lange Rede kurzer Sinn, ich habe probleme ein farb array (rgb = 3x Bytes) zu füllen! Der Speicher wurde mit allocmem reserviert!
Delphi-Quellcode:
procedure TPCX.get_palette(i: integer);
var
   ini: TiniFile;
   test: string;
   k: integer;
   testcolor: TColor;

begin
     if PXD_Descriptor.palette[i] <> NIL then begin
        ini:=TIniFile.Create(mainform.configpath+'\Einstellungen.ini'); // .ini wird erstellt

        ReglerRGB:= ini.Readstring('ReglerAuswahl','1','');
        ReglerReso:= ini.Readstring('ReglerAuswahl','2','');
           for k:=0 to 255 do begin
               test:= ini.Readstring(ReglerRGB,inttostr(k),'');
               testcolor:= stringtoColor(test);
 
               PXD_Descriptor.Palette[i].rgbBlue:= colortorgb(testcolor);

               PXD_Descriptor.Palette[i].rgbGreen:= colortorgb(testcolor);

               PXD_Descriptor.Palette[i].rgbRed:= colortorgb(testcolor);

           end;
        end;
        Ini.Free;
end;
Versuche eine Farbpalette in das Array zu schreiben, aber ich weiss nicht, wie ich die folgenden array punkte anspreche!
Da es ja kein pointer ist kann ich nicht mit inc(Pxd_Descriptor.Palette[i].rgbBlue); eine neue ebene schaffen!

Komme mir selber blöde vor, deshalb bitte nicht noch Salz in die Wunde streuen! Bitte!
Danke jedem schonmal für die Hilfe!
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: dynamischer Speicher füllen

  Alt 18. Mai 2005, 15:37
Hatse mal die Deklartion von PXD_Descriptor
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Porter10

Registriert seit: 18. Mai 2005
Ort: Bergisch Gladbach
6 Beiträge
 
Delphi 5 Professional
 
#3

Re: dynamischer Speicher füllen

  Alt 18. Mai 2005, 16:05
Delphi-Quellcode:
   TPXD_Descriptor = packed record
      NumPictures : WORD;
      NumData : array[0..MAX_PIC-1] of WORD;
      PicName : array[0..MAX_PIC-1] of array[0..8] of char;
      TabName : array[0..MAX_PIC-1] of array[0..8] of char;
      DataPtr : array[0..MAX_PIC-1] of PPCX_DATA;
      ///////////////ab hier neuer Teil/////////////////////////////////////
      ReglerType : word;
      AnzColors : array[0..MAX_PIC-1] of word;
      Palette : array[0..MAX_PIC-1] of PRGB_TYPE;
      Komment : array[0..MAX_PIC-1] of array[0..40] of char;
      dst_name : array[0..MAX_PIC-1] of array[0..8] of char;
      type_name : array[0..MAX_PIC-1] of array[0..3] of char;
      PicType : array[0..MAX_PIC-1] of word;
   end;


Delphi-Quellcode:
  TRGB_TYPE = packed record
      rgbBlue : Byte;
      rgbGreen : Byte;
      rgbRed : Byte;
   end;
Hier sind die Records! Danke aber schonmal fuer die schnelle Antwort!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: dynamischer Speicher füllen

  Alt 18. Mai 2005, 16:24
Ist es das, was du suchst?

Delphi-Quellcode:
// damit erhöhst du nur den RGB-Wert für Blau:
inc(Pxd_Descriptor.Palette[i].rgbBlue);

// so kannst du auf die nächste Palette zugreifen:
Inc(i);
Pxd_Descriptor.Palette[i].rgbBlue := BlauWert;
Pxd_Descriptor.Palette[i].rgbGreen := GruenWert;
Pxd_Descriptor.Palette[i].rgbRed := RotWert;

// Oder auch so:
with Pxd_Descriptor.Palette[i] do begin
  rgbBlue := BlauWert;
  rgbGreen := GruenWert;
  rgbRed := RotWert;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: dynamischer Speicher füllen

  Alt 18. Mai 2005, 18:55
Du must nur den wert der Constante MAX_PIC erhöhen die gibt nämlich den max wert an
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Porter10

Registriert seit: 18. Mai 2005
Ort: Bergisch Gladbach
6 Beiträge
 
Delphi 5 Professional
 
#6

Re: dynamischer Speicher füllen

  Alt 19. Mai 2005, 12:38
Die Anzahl von Bildern soll und muss so bleiben! Ich möchte eine Farbpalette fuer jedes Bild hinterlegen wo jeweils die Rot Blau und Grün anteile drin stehen! Daher rechne ich die Anzahl der Farben mal 3 Byte, um die Farbanteile da rein zu schreiben! Mit inc(Pxd_Descriptor.Palette[i].rgbBlue); habe ich es schon versucht! Was aber anscheinend nur bei Pointern funktioniert! Oder es addiert nur eine 1 hinzu! Ich möchte wissen wie ich bei 255 * 3 Byte Speicherreservierung, da rauf zu greife!
Delphi-Quellcode:
MemSize := SizeOf(TRGB_TYPE) * PXD_Descriptor.AnzColors[i];
         PXD_Descriptor.Palette[i] := AllocMem(MemSize*2);
Aber schonmal Danke fuer die Hilfen! Wusste auch nicht genau wie ich das Problem umschreiben soll! Bin Forums neuling!
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

Re: dynamischer Speicher füllen

  Alt 19. Mai 2005, 12:45
Erstmal Herzlich Willkommen in der DP (ganz vergessen )

Du kannst das so machen um deine Farbpalette zu speichern

Palette : array[0..MAX_PIC-1] of Array[0..255] of PRGB_TYPE;
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: dynamischer Speicher füllen

  Alt 19. Mai 2005, 12:49
Porter10, du denkst zu sehr in C.

PXD_Descriptor.Palette ist Teil einer Struktur, der ganze packed record TPXD_Descriptor ist ein struct. Wenn du irgendwas dynamisch anlegen willst, dann nur den ganzen Deskriptor.

Delphi-Quellcode:
var
  PXD_Descriptor: TPXD_Descriptor; // statisch
  PPXD_Descriptor: ^TPXD_Descriptor;
begin
  PPXD_Descriptor := AllocMem(SizeOf(TPXD_Descriptor)); //dynamisch
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: dynamischer Speicher füllen

  Alt 19. Mai 2005, 15:42
Hallo Porter10,

manchmal dauert es etwas länger. Wenn PRGB_TYPE ein Pointer auf TRGB_TYPE ist, dann ist Palette ein Zeigerfeld. Du forderst den gesamten für die Paletten benötigten Speicher mit einem AllocMem() an. Kann man machen, ist auch irgendwo ökonomisch, aber dann musst du trotzdem die einzelnen Pointer initialisieren. Oder du forderst den Speicher für jede Palette einzeln an.

Delphi-Quellcode:

var
  i: integer;
  p: PRGB_TYPE;
begin
  // Einzelanforderung
  for i := 0 to MAX_PIC - 1 do
    New(Palette[i]);

  // Blockanforderung
  p := AllocMem(...);
  for i := 0 to MAX_PIC - 1 do begin
    Palette[i] := p;
    Inc(p);
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Porter10

Registriert seit: 18. Mai 2005
Ort: Bergisch Gladbach
6 Beiträge
 
Delphi 5 Professional
 
#10

Re: dynamischer Speicher füllen

  Alt 22. Mai 2005, 11:59
@Marabu

Danke fuer deine Antworten! Habe eben echt leider noch recht wenig Delphi Erfahrung!
Werde es morgen direkt mal auf der Arbeit ausprobieren! Melde mich dann noch mal ob es geklappt hat oder nicht!

Alles Gute!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:31 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