AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Mehrere Bilder in einer Datei Speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Bilder in einer Datei Speichern

Ein Thema von Christian.Ossi · begonnen am 11. Jul 2006 · letzter Beitrag vom 8. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
Christian.Ossi

Registriert seit: 23. Mai 2004
Ort: Greußen
91 Beiträge
 
Delphi 2006 Architect
 
#1

Mehrere Bilder in einer Datei Speichern

  Alt 11. Jul 2006, 23:10
Ich wollte mal wissen, ob es möglich ist, mehrere kleine jpg-Bilder in einer einzigen Datei - sozusagen als Datenbank - zu speichern!?

Ich hab ein Programm geschrieben wo nun kleine Bildchen noch aus einer Datei heraus gelesen werden sollen, die dann dort angezeigt werden sollen. Also muss man die auch z.B. per Nummer ansprechen können und dann eben aus einer einzigen Datei auslesen können.

Ist sowas möglich? Oder muss man dann alle einzeln abspeichern - ich wollte der Ordnung wegen nur eine einzige Datenbankdatei.


Danke schonmal!
Christian Rose
© Christian.Ossi
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#2

Re: Mehrere Bilder in einer Datei Speichern

  Alt 11. Jul 2006, 23:12
Hallo,

du kannst einfach deine Bilder in ein Archiv packen (z.B.: In ein Zip Archiv)
Es gibt Komponenten die mit Zip Archiven umgehen können.

Gruß,
Ferby
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: Mehrere Bilder in einer Datei Speichern

  Alt 11. Jul 2006, 23:15
Eine Lösung wäre XML:

Du speicherst die jpegs in jewils einen Stream. Dann kanst du die einzelnen Streams in xml Speichern. Nachteil diese Datei wird etwas größer da die daten anderes gespeichert werden.

Hier noch eine Unit an der ich grade arbeite die streams in xml speichern soll (benötigt die JEDI Komponetenten):
Delphi-Quellcode:
{******************************************************************************}
{*                                                                            *}
{* Project:        CrashPoint                                                 *}
{* Unit:           uCP_MapFile                                                *}
{* Version:        1.0                                                        *}
{*                                                                            *}
{* Description:                                                               *}
{*                 Klasse um eine Liste von Streams in eine Datei zu          *}
{*                 speichern und zu lesen                                     *}
{*                                                                            *}
{* Log:                                                                       *}
{*               # First Version                                              *}
{*                                                                            *}
{*                                                                            *}
{* Author:         Björn R. Salgert (bjoern@bsnx.net)                         *}
{* URL:            N/A - [url]http://bsnx.net[/url]                                      *}
{*                                                                            *}
{******************************************************************************}
unit uCP_MapFile;

interface

uses SysUtils, Classes, JvSimpleXml, Dialogs;

type
  TMapFile = class (TJvSimpleXML)
  protected

  public
    procedure AddStream(Name: String; Stream: TStringStream);
    procedure GetStream(Name: String; Stream: TStream);
    procedure AddString(Name, Text: String);
    function GetString(Name: String): String;
    procedure AddInt(Name: String; I: Integer);
    function GetInt(Name: String): Integer;
    constructor Create(AOwner: TComponent); override;
  end;

implementation

function streamtostr(S: TStream): string;
var
  str: string;
  lStringStream: TStringStream;
begin
  lStringStream := TStringStream.Create;
  Try
    lStringStream.CopyFrom(S, 0);
    Result := lStringStream.DataString;
  Finally
    lStringStream.Free;
  End;
end;

function strtohex(Text: String): String;
var
  i: integer;
  s: string;
begin
  for i:=1 to length(Text) do begin
    s:= s+IntToHex(Byte(Text[i]), 2);
  end;
  result:=s
end;

{ TMapFile }

procedure TMapFile.AddInt(Name: String; I: Integer);
begin
  Self.Root.Items.Add(Name, i);
end;

procedure TMapFile.AddStream(Name: String; Stream: TStringStream);
begin
// Self.Root.Items.Add(Name, strtohex(Stream.DataString));
  Stream.Position:=0;
  Self.Root.Items.Add(Name, Stream);
end;

procedure TMapFile.AddString(Name, Text: String);
begin
  Self.Root.Items.Add(Name, Text);
end;

constructor TMapFile.Create(AOwner: TComponent);
begin
  inherited;
  Self.Root.Name:= 'map';
end;

function TMapFile.GetInt(Name: String): Integer;
begin
  if Self.Root.Items.ItemNamed[Name]<>nil then begin
     result:=Self.Root.Items.ItemNamed[Name].IntValue;
  end;
end;

procedure TMapFile.GetStream(Name: String; Stream: TStream);
var
  b: Byte;
  i: integer;
begin
  if Self.Root.Items.ItemNamed[Name]<>nil then begin
     Stream.Position:=0;
     Self.Root.Items.ItemNamed[Name].GetBinaryValue(Stream);
     {
    for i:=1 to Length(Self.Root.Items.ItemNamed[Name].Value) do begin
      B:= Byte(Self.Root.Items.ItemNamed[Name].Value[i]);
      Stream.Write(B, sizeof(B));
     end; }

  end;
end;

function TMapFile.GetString(Name: String): String;
begin
  if Self.Root.Items.ItemNamed[Name]<>nil then begin
    result:= Self.Root.Items.ItemNamed[Name].Value;
  end;
end;

end.
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
mr.winkle

Registriert seit: 25. Mai 2006
98 Beiträge
 
Delphi 7 Personal
 
#4

Re: Mehrere Bilder in einer Datei Speichern

  Alt 11. Jul 2006, 23:18
Du kannst auch mehrere Bilder in einer großen Bilddatei zusammenfassen, das lohnt sich aber nur bei recht kleinen bildern

wenn alle bilder die selbe größe haben gibt es in der delphix imagelist die möglichkeit eine patternwidth und patternheight festzulegen.
Du kannst dann über eine zahl auf ein bestimmtes Bild zugreifen - was z.b bei animationen sehr nützlich ist da man nicht 123 bilder verwalten muss.

Bei verschiedenen Größen müsste man mit einer Trennfarbe oä arbeiten, was allerdings recht rechenintensiv wäre.

Von anderen Lösungen habe ich noch nichts gehört, würde mich aber auch mal interessieren!
  Mit Zitat antworten Zitat
Christian.Ossi

Registriert seit: 23. Mai 2004
Ort: Greußen
91 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Mehrere Bilder in einer Datei Speichern

  Alt 12. Jul 2006, 00:32
Also die Bilder wären alle max. 90x90 Pixel groß - eben im jpg-Format.
Das ist ja noch recht klein....denk ich.

Wie geht das mit DelphiX - davon habe ich schonmal was gehört.
Die Sache ist nur die - ich will ja online auf meinem Free-Webspace die einzelnen kleinen durchnummerierten Bildchen verfügbar machen und das Programm holt sich die und legt sie auf der eigenen Festplatte ab - aber nicht wie online mehrere, sondern als eine Datei.

Von dieser aus sollen die Bilder im Programm eingebunden werden.
Also sozusagen kann man online ein Bild austauschen und das Programm holt sich das Bild oder die Bilder und speichert diese dann als Art Datenbank lokal zum Öffnen im eigenen Programm.
Christian Rose
© Christian.Ossi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Mehrere Bilder in einer Datei Speichern

  Alt 12. Jul 2006, 05:46
Dann würde sich, wie schon geschrieben ein Archiv anbieten oder du speicherst die Bilder wirklich in einer Datenbank.
Markus Kinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Mehrere Bilder in einer Datei Speichern

  Alt 12. Jul 2006, 07:16
Hi,
ich würde dir auch von einer großen Datei abraten. Hat eher eine Menge Nachteile. Gerade bei XML (hier imho völlig ungeeignet) müsstest du dann tunlichst darauf achten, dass du nicht immer die ganze Datei im Speicher hälst. Damit ist die Wahl deines XML Parsers evtl. schon eingeschränkt. Ein Archiv bietet da schon deutlich mehr Flexibilität. Am einfachsten legst du darin noch (etwas an eine DB angelehnt) eine Indexdatei an und dann kannst du über diese schnell nach bestimmten Eigenschaften suchen ohne alle Bilder ständig entpacken zu müssen. Damit solltest du also ohne Probleme nur noch gezielt auf einzelne Elemente zugreifen können.
Ich würde dir hier Abbrevia empfehlen (sorry, zu faul den Link zu suchen).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Mehrere Bilder in einer Datei Speichern

  Alt 12. Jul 2006, 07:49
Ich hätt noch Compound Documents anzubieten. Quasi ein virtuelles Dateisystem innerhalb einer Datei, leider unkomprimiert, aber ich denke, da liese sich noch was dran feilen. Vorteil dabei: du kannst auf jedes File wie vom richtigen Dateisystem auch, per Stream zugreifen ohne ein File entpacken zu müssen. Der Link in der Doku ist leider tot, aber ich kann die Files hochstellen, wenn bedarf ist.
  Mit Zitat antworten Zitat
franktron

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

Re: Mehrere Bilder in einer Datei Speichern

  Alt 12. Jul 2006, 08:24
Schau mal in die Code Lib da habe ich vor kurzem ein Virtuelles Dateisystem reingepackt
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: Mehrere Bilder in einer Datei Speichern

  Alt 12. Jul 2006, 09:01
Zitat von cruiser:
Ich hätt noch Compound Documents anzubieten. Quasi ein virtuelles Dateisystem innerhalb einer Datei, leider unkomprimiert
Also auf Kompression denke ich sollte man bei JPEGs nicht mehr achten müssen. Die haben ja gerade schon die Eigenschaft ziemlich kompakt zu sein. Ich weiß nicht wieviel Prozent man da noch rausholt, dürfte sich aber kaum lohnen. Daran sollte es also nicht scheitern!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:40 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