Autor Beitrag
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Fr 25.06.04 12:22 
Muetze1 hat folgendes geschrieben:
Es geht nicht um die TObjectList sondern um TImage - und daher glaube ich nicht, das es sich mit dem Speicherverbrauch erledigt hat.


Wie kommst du überhaupt auf TImage? TImage ist eine visuelle Komponente. TImage für die Aufgabe zu nehmen ist im wahrsten Sinne mit Kanonen aus Spatzen schießen. Nein, er hat Jpegs und entweder sucht er sich (im Internet) eine Komponente alla TImageList für Jpegs, oder er nimmt TObejtList und legt dort seine Jpegs ab. Denn auch ein TJpeg ist ein Objekt.

@DJ Raptor

Ich hab gerade kein Delphi vor mir. Deshalb kann ich dir auch kein Beispiel liefern, weil ich mit TObjectList selbst noch nie was gemacht habe. Aber das dürfte kein großes Problem sein. Ob TObjectList oder TStringList, alle arbeiten ähnlich. Guck dir TObjectList selbst mal. Wahrscheinlich gibts da auch Beispiele.

_________________
Gruß
Martin
DJ Raptor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24

Win XP
D2005
BeitragVerfasst: Fr 25.06.04 12:34 
es soll ja auch kein Programm für den normalen Heimanwender sein, sondern ein sehr fachbezogenes Programm für Fotostudios. Es soll ja während einer Fotosession nach und nach die Bilder in den Speicher laden so wie sie ankommen. und die Bilder sollen später dann alle miteinander verzögerungsfrei verglichen werden können. Ich guck ja keine Urlaubsfotos an wo ich von 1.jpg nach 2.jpg un so weiter wechsel, sondern ich möchte ohne Ladezeit 2.jpg mit beispielsweise 132.jpg vergleichen können und beliebig zwischen allen Bildern wechseln können.

Ich hab auch mittlerweile das ganze mit einem Stream lösen können. Allerdings kann dieser anscheinend keine Jpgs verwalten. Wenn ich ein Bitmap lade klappt das einwandfrei bei einem Jpg stürzt das Programm ab. Nachfolgend der momentane Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.listViewThumbsCacheItemAdd(
  Sender: TCustomVirtualExplorerListviewEx; NS: TNamespace;
  Thumbnail: TBitmap; var ImageWidth, ImageHeight: Integer;
  var DoDefault: Boolean);
  var arrayLength: integer;
  begin
    loadProgress.Visible := true;
    Application.ProcessMessages;
    if cfgCacheFiles.Checked = true then
    begin

      arrayLength := length(stream);
      setLength(stream,arrayLength+1);
      stream[arrayLength] := TMemoryStream.Create;
      stream[arrayLength].LoadFromFile(NS.NameForParsing);

    end;
    I:=I+1;
    loadProgress.Max := listView.TotalCount;
    loadProgress.Position := I;
    Label1.Caption:=inttostr(I)+'/'+inttostr(listView.TotalCount);
    if I = loadProgress.Max then loadProgress.Visible := false;
end;


Geladen werden soll dann so:

ausblenden Delphi-Quelltext
1:
  image.Bitmap.LoadFromStream(stream[0]);					
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Fr 25.06.04 12:57 
ausblenden Delphi-Quelltext
1:
image.Bitmap.LoadFromStream(stream[0]);					


So kannst du auch keine Jpegs laden. Wenn, dann mußt du es über ein Umweg machen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  Jpg: TJPEGImage;
begin
  Jpg := TJPEGImage.Create;
  try
    Jpg.LoadFromStream(...)
    ...


Und dann mit Assign an Image.Picture.Bitmap übergeben.

Allerdings finde ich immer noch, daß die TObjektList Variante besser wäre, da man da wunderbar auch die einzelnen Daten verwalten kann (anfügen, einfügen, löschen, ...).

_________________
Gruß
Martin
DJ Raptor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24

Win XP
D2005
BeitragVerfasst: Sa 26.06.04 12:56 
Also zu TObjectList find ich nix bei Delphi in der Hilfe?? Weiß denn wer wie das funktionieren soll?
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Sa 26.06.04 15:02 
Welche Delphi Version hast du? TObjectList kamm erst irgendwann dazu.

_________________
Gruß
Martin
DJ Raptor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24

Win XP
D2005
BeitragVerfasst: Sa 26.06.04 17:09 
also ich habe delphi 7 professional enterprise.
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Sa 26.06.04 17:24 
In der 7 ist TObjectList bereits drinn. Gib TObjectList nicht im Index, sondern in der Suche ein. Da kommst du zum Topic "Mit Listen arbeiten". Da findest du ein Link auf "TObjectList".

_________________
Gruß
Martin
Codewalker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46



BeitragVerfasst: Mi 30.03.05 15:32 
Ich hatte das Problem mit dem Speicherhunger auch. ich habe Bilder von meiner Digicam eingelesen und ab ca. 800 Bildern hat der einfach keine mehr angezeigt (zur Anzeige habe ich ein TListView benutzt). Ich habe dann einfach mal die tJvImageList aus der JEDI-VCL genommen. Die hat mehrere Modi von denen ich nicht genau sagen kann was sie bewirken, aber insgesamt ist der Speicherhunger bei mir je nach Bilder um bis zu 70% zurückgegangen.

Ein Versuch wäre es jedenfalls wert.

Mfg