Einzelnen Beitrag anzeigen

Porter10

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

Re: dynamischer Speicher füllen

  Alt 24. Mai 2005, 13:54
Komme leider immer noch nicht viel weiter! Gebe mal die Kompletten funktionen frei, vielleicht könnt ihr mir dann vielleicht doch noch besser Hilfe geben! Habe es mal versucht, wie Marabu es mir beschrieben hat, aber leider ohne Erfolg! Also der Speicher wird ja durch AllocMem reserviert, und mit nullen gefüllt! Aber anscheinend habe ich nur den Speicher in der Größe von 3 * 256 Bytes = 768 Bytes reserviert! Wie bekomme ich jetzt aus dem Allocierten Speicher ein beschreibbares und auslesbares array gestrickt?

Dies ist die Procedure die genutzt wird um den Speicher zu reservieren!
Delphi-Quellcode:
procedure TPCX.GetMemory;
var
   i,l : integer;
   MemSize : integer;
   p: PRGB_TYPE;

begin
   for i := 0 to PXD_Descriptor.NumPictures-1 do begin
      MemSize := SizeOf(TPcx_Data) * PXD_Descriptor.NumData[i];
      PXD_Descriptor.DataPtr[i] := AllocMem(MemSize);
   end;


   for i := 0 to PXD_Descriptor.NumPictures -1 do begin
      if PXD_Descriptor.AnzColors[i] >= 0 then begin
         MemSize := SizeOf(TRGB_TYPE) * PXD_Descriptor.AnzColors[i];
                p:= AllocMem(MemSize*2);
                PXD_Descriptor.Palette[i] := p;
                 
        for l := 0 to 255 do begin
           get_palette(i,l);
           Inc(p);
        end;

        end;

   end;
end;
Get_palette habe ich neu geschrieben, um die Farbtabelle aus einer ini Datei auszulesen, um Sie dann in das dynamische Array hineinzuschreiben! Kann hier aber nur auf die erste Ebene zugreifen!

@Franktron
Dein Vorschlag mit dem festen array ist gar nicht mal so schlecht! Will aber noch nicht zu dieser Lösung tendieren, da ich es lieber dynamisch haette! Da wir bei unserem alten Regler auch noch mit 16 Farben Bildern arbeiten! Würde aber auch gehen, da ich die ersten 16 Farben eh identisch gehalten habe!

Delphi-Quellcode:
//////////////////////////neu Palette einlesen aus der .ini datei///////////
procedure TPCX.get_palette(i,l: integer);
var
   ini: TiniFile;
   test: string;
   k: integer;
   testcolor: TColor;
   rgbtest: Byte;
   PRGB: PRGB_TYPE;

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(l),'');
               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;
Vielleicht kann mir ja doch jemand den entscheidenden Hinweis geben! Man kann mir das vielleicht an der Hand eines kleines Beispeils verdeutlichen wo mein Denkfehler ist!


Danke!!!
  Mit Zitat antworten Zitat