![]() |
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 |
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:
wmf, emf, ico und bmp!
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; 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:
Diese Methode müsstest du dann implementieren (überschreiben).
procedure Draw(ACanvas: TCanvas; const Rect: TRect); virtual; abstract;
Genau dies macht auch die TPNGObject Klasse (PNGImage.pas). Weiters registriert diese Unit die Klasse im Initialization Teil derselben Unit:
Delphi-Quellcode:
Im Grunde wäre es das eigentlich schon.
initialization
{...} {$IFDEF UseDelphi}{$IFDEF RegisterGraphic} TPicture.RegisterFileFormat('PNG', 'Portable Network Graphics', TPNGObject); {$ENDIF}{$ENDIF} Noch Fragen? |
AW: mehrere Bilder Speicher verwalten
Wie wäre es mit einer Objektliste (TObjectList)?
|
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 01:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz