Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrere Bilder Speicher verwalten (https://www.delphipraxis.net/157224-mehrere-bilder-speicher-verwalten.html)

Nicki 3. Jan 2011 23:09

Delphi-Version: 5

mehrere Bilder Speicher verwalten
 
Hallo,

ich überlege, Bitmap-Bilder bei meinem Mini-Bildbearbeitungsprogramm im Speicher zu behalten und bei Bedarf anzuzeigen.
Also ich habe 1 einziges image1.picture.Bitmap.
Und aus diesem image1.Picture möchte ich die fertigen Bilder einen Moment irgendwo im RAM "abspeichern".
Zwischenzeitlich ein anderes, neues im image1.picture bearbeiten und vielleicht noch ein neues.
die neuen sollen dann auch im RAM ausgelagert werden, während ich dann z.B. auf Knopfdruck das erste Bild wieder in mein Imag1.picture "laden"/holen will.
Also mehrere Bilder im RAM behalten, die benötigten voranholen können,
aber das alles mit nur 1 Anzeigetafel-Image.

Nun dachte ich erst daran, die andern Bilder in einer imagelist zu speichern.
Aber die Bilder haben möglicherweise alle unterschiedliche Formate/Größen. 640x480,800x450, usw.
Aber eine imagelist kann ja nur Bilder gleicher Größen beinhalten (z.B. Icons)

somit kann müßte ich das irgendwie anders lösen.
Hat jemand eine Idee, die man auch mit Delphi 3 (mhh, oder wenigstens D4 oder D5) umsetzen kann?
Zudem auch einfach - d.h. ohne 20 zahlreiche Komponenten, welche nur unter Delphi 2012 usw. laufen oder Geld kosten oder 1500 Zeilen Code, usw.

Danke

Aphton 3. Jan 2011 23:50

AW: mehrere Bilder Speicher verwalten
 
Zuerst einmal müsstest du alle Bildformate, die du in deinem Programm anzeigen und bearbeiten willst, laden können. Folgende Bilder ünterstützt TPicture (Turbo Delphi Explorer):
Delphi-Quellcode:
constructor TFileFormatsList.Create;
begin
  inherited Create;
  Add('wmf', SVMetafiles, 0, TMetafile);
  Add('emf', SVEnhMetafiles, 0, TMetafile);
  Add('ico', SVIcons, 0, TIcon);
  Add('bmp', SVBitmaps, 0, TBitmap);
end;
wmf, emf, ico und bmp!

Wenn du zb. JPEG Bilder haben willst, müsstest du eine Klasse von TGraphic ableiten, den Ladevorgang und bestimmte weitere Funktionen implementieren und per TPicture.RegisterFileFormat() registrieren. Somit kann die TPicture Klasse dann selbst diese Klasse nützen und diese Bilder eben anzeigen.

Weiters wäre es angebracht eine Liste oder einen Manager zu programmieren, der Picture Instanzen verwalten und bestimmte Aufgaben (anzeigen usw) durchführen kann.

Edit:
Delphi-Quellcode:
    procedure Draw(ACanvas: TCanvas; const Rect: TRect); virtual; abstract;
Diese Methode müsstest du dann implementieren (überschreiben).
Genau dies macht auch die TPNGObject Klasse (PNGImage.pas). Weiters registriert diese Unit die Klasse im Initialization Teil derselben Unit:
Delphi-Quellcode:
initialization
  {...}
  {$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
    TPicture.RegisterFileFormat('PNG', 'Portable Network Graphics', TPNGObject);
  {$ENDIF}{$ENDIF}
Im Grunde wäre es das eigentlich schon.

Noch Fragen?

Luckie 3. Jan 2011 23:51

AW: mehrere Bilder Speicher verwalten
 
Wie wäre es mit einer Objektliste (TObjectList)?

Bummi 3. Jan 2011 23:54

AW: mehrere Bilder Speicher verwalten
 
Ich weiß nicht ob es in den alten Versionen schon TObjectlist gab, daher mit TList, ungetestet, ohne Fehlerbehandlung, nicht optimiert ....

Delphi-Quellcode:
private
FList:TList;
..
..
procedure TForm1.FormCreate(Sender: TObject);
begin
  FList := TList.Create;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
var
  i:Integer;
begin
  for i := 0 to FList.Count - 1 do TObject(FList[i]).Free;
  FList.Free;
end;


Procedure TForm1.AddToList;
var
 bmp:TBitmap;
begin
 bmp := TBitmap.Create;
 bmp.assign(Image1.Picture.Bitmap);
 FList.add(bmp);
end;

Procedure LoadFormList(index:Integer);
begin
  Image1.Picture.Bitmap.assign(FList[index]);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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