AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere Bilder Speicher verwalten

Ein Thema von Nicki · begonnen am 3. Jan 2011 · letzter Beitrag vom 3. Jan 2011
Antwort Antwort
Nicki

Registriert seit: 3. Jan 2011
1 Beiträge
 
Delphi 3 Professional
 
#1

mehrere Bilder Speicher verwalten

  Alt 3. Jan 2011, 23:09
Delphi-Version: 5
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
Signatur?
nö, brauch ich nicht. Danke
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: mehrere Bilder Speicher verwalten

  Alt 3. Jan 2011, 23:50
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:
    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?
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton ( 4. Jan 2011 um 00:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: mehrere Bilder Speicher verwalten

  Alt 3. Jan 2011, 23:51
Wie wäre es mit einer Objektliste (TObjectList)?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: mehrere Bilder Speicher verwalten

  Alt 3. Jan 2011, 23:54
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:10 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