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 2 von 2     12   
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, 14: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
franktron

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

Re: dynamischer Speicher füllen

  Alt 24. Mai 2005, 15:01
Dann machs so

Delphi-Quellcode:
Palette : array[0..MAX_PIC-1] of Array of PRGB_TYPE;

und dann mit Setlength(Palette[i],AnzFarben) die grösse setzen
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
 
#13

Re: dynamischer Speicher füllen

  Alt 24. Mai 2005, 22:27
Hallo porter10,

ich nehme an, dass an deinem Code nicht viel geändert werden darf, also habe ich mich darauf beschränkt die Mängel zu beheben, die ich erkennen konnte. Vielleicht schaut ja noch jemand drüber. Getestet habe ich nicht. Wenn dir etwas spanisch vorkommt können wir drüber reden.

Delphi-Quellcode:
procedure TPCX.GetMemory;
var
  i, l: integer;
  memSize: integer;
  p: PRGB_TYPE;
  ini: TiniFile;
begin
  ini := TIniFile.Create(mainform.configpath + '\Einstellungen.ini');

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

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

  end;

  Ini.Free;
end;


procedure TPCX.get_palette(ini: TIniFile; p: PRGB_TYPE; l: integer);
var
  test: string;
  testcolor: TColor;
begin
  ReglerRGB := ini.Readstring('ReglerAuswahl', '1', ''); // global var?
  ReglerReso := ini.Readstring('ReglerAuswahl', '2', ''); // global var?
  test := ini.Readstring(ReglerRGB, inttostr(l), '');
  testcolor := stringtoColor(test);
  p^.rgbBlue := colortorgb(testcolor);
  p^.rgbGreen := colortorgb(testcolor);
  p^.rgbRed := colortorgb(testcolor);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Porter10

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

Re: dynamischer Speicher füllen

  Alt 27. Mai 2005, 15:06
@Marabu

Danke vielen Dank! Hast mir sehr geholfen, war ein guter denk anstoss!
Habe also das Problem gelöst, und schon baut sich ein neues auf! Weist du vielleicht noch eine gute Methode um Hexadezimale Farbwerte in rot gruen und blau anteil aufzuteilen! Wie du ja bereits gesehen hast, hatte ich das versucht mit ColortoRGB, aber das liefert mir ja nur einen longint windowsrgb wert wieder, so wie ich das verstanden habe!
Wie könnte ich vorgehen, wenn ich $800080 in 128-0-128 haben wollte!

Wollte andere Helfer nicht verprellen, nur weil ich jetzt direkt an Marabu geschrieben habe das Problem! Wenn wer anderes auch einen Rat fuer mich hat, bin ich sehr dankbar!

  Mit Zitat antworten Zitat
marabu

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

Re: dynamischer Speicher füllen

  Alt 27. Mai 2005, 15:41
Hilft dir das weiter?

Delphi-Quellcode:
function SetRGB(var RGB: TRGB_TYPE; colorString: string): boolean;
var
  c: TColor;
  a: array [1..3] of byte absolute c;
begin
  c := StringToColor(colorString);
  rgb.rgbRed := a[1];
  rgb.rgbGreen := a[2];
  rgb.rgbBlue := a[3];
end;

procedure TPCX.get_palette(ini: TIniFile; p: PRGB_TYPE; l: integer);
var
  test: string;
begin
  ReglerRGB := ini.Readstring('ReglerAuswahl', '1', ''); // global var?
  ReglerReso := ini.Readstring('ReglerAuswahl', '2', ''); // global var?
  test := ini.Readstring(ReglerRGB, inttostr(l), '');
  SetRGB(p^, test);
end;
Du müsstest dir nur noch Gedanken über die Absicherung deines Codes machen. Was soll passieren, wenn unsinnige Werte in der Steuerdatei stehen?

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:33 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