Autor Beitrag
Jazzalex
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Fedora Core 3, Winx XP

BeitragVerfasst: Sa 19.08.06 09:58 
Hallo allerseits,

eine vielleicht recht banale Frage, die mir im Moment allerdings Probleme bereitet :

Ich habe ein Timage, welches neben einer Hand voll anderen Daten in einem Array und dieses schließlich in einem File gespeichert wird.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type Datentyp = record 
begin
  image : TImage;
  xpos  : integer;
  ypos  : integer 
end;

Daten : array[1..20] of Datentyp;
f1    : file of Datentyp;


Speichere ich die Daten im File und lade diese anschließend, so werden alle anderen Werte ausgelesen, das Image selbst aber nicht.

Ist es überhaupt möglich, die Bitmapdaten so zu speichern bzw. muß ich zuätzlich Routinen aufrufen ? Alle zu TImage gehörenden Calls nützen gerade auch nichts (update,refresh u.s.w.)

Hat jemand eine Ahnung, wo das Problem liegt ?

Dank im voraus

-- A l e x

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Masterhawk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 92

Win 2000,Win XP
D6 Pers
BeitragVerfasst: Sa 19.08.06 15:28 
Wird das Image denn erstellt und werden alle Werte wie gespeichert in TImage wieder eingeführt oder wird TImage gar net erst geladen?
Dann könnte das Problem bei TImage selber liegen, da Image glaub nur n Zeiger is....(aber wie gesagt, genau weiß ich es nicht)

Wenn nur das Bild nicht geladen wird, dann versuch es mal damit, dass du das Bild einfach in TGraphic schreibst und dann in deinem record speicherst....

MfG Masterhawk
Jazzalex Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Fedora Core 3, Winx XP

BeitragVerfasst: So 20.08.06 00:12 
Aha - TImage ist also nur ein Zeiger. Ok - dann ist es tatsächlich nur das Problem, daß das Bild nicht korrekt gespeichert bzw. geladen wird.

Also muß ich das Problem umformulieren :

Ich möchte ersteinmal vorhandene Bitmaps in einem Array speichern und dieses in einem File speichern, damit ich auf die Originalbitmaps schlußendlich verzichten kann. Ist dies mit TPicture möglich ? Ich mache mich mal an die Arbeit, bin aber für jeden Hinweis dankbar.

Dank im voraus

-- A l e x
Jazzalex Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Fedora Core 3, Winx XP

BeitragVerfasst: So 20.08.06 00:37 
So - ich nochmal :

Nun habe ich mir ein pic TPicture definiert und versucht, mein Bitmap via pic.loadFromFile(Pfad) reinzuladen.

Was passiert ist : EAccessViolation / Read of address 00000000

Kann mir jemand sagen, warum ?

Danke

-- A l e x
Masterhawk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 92

Win 2000,Win XP
D6 Pers
BeitragVerfasst: So 20.08.06 00:45 
Poste mal bitte den Code thx....dann kann man besser schauen^^
Jazzalex Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Fedora Core 3, Winx XP

BeitragVerfasst: Mo 21.08.06 09:06 
klar :

type Datentyp = RECORD
picture : TPicture;
xpos : integer;
ypos : integer;
up : integer;
down : integer;
left : integer;
right : integer;
END;

var
Daten : array[0..20] of Datentyp;

procedure Tcomposerform.Button1Click(Sender: TObject);
var check : string;
begin
OpenDialog1.Filter := 'Bitmap|*.bmp|All files|*.*';
if OpenDialog1.Execute then
begin
Image1.Stretch := FALSE;
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
Daten[0].Picture.LoadFromFile(OpenDialog1.FileName); // HIER GIBT'S DAS PROBLEM
end;
end;
Masterhawk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 92

Win 2000,Win XP
D6 Pers
BeitragVerfasst: Mo 21.08.06 10:15 
Sers....

also so funktioniert es...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
uses JPEG; //für Verwendung von JPEG-Dateien

[...]

procedure TForm1.Button3Click(Sender: TObject);
 var check : string;
begin
 OpenDialog1.Filter := 'Bitmap|*.bmp|All files|*.*';
 if OpenDialog1.Execute then
  begin
  Image1.Stretch := FALSE;
  Daten[0].Picture:=TPicture.Create; //Hier lag der Fehler...der Pointer musste erst beschrieben werden
  Daten[0].Picture.LoadFromFile(OpenDialog1.FileName);
  Image1.Picture.Assign(Daten[1].Picture);
 end;
end;


Hoffe du kommst damit weiter.....ich bezweifel aber immer noch, dass du dein Record so komplett in eine Datei speichern kannst...

MfG Masterhawk
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 21.08.06 10:16 
Moin!

Vorab: du solltest deinen Code mit den Delphi-Tags kapseln, damit das Syntaxhighligthing aktiv ist, so kann man den Code besser lesen.

Jetzt zu deinem Problem. Was du suchst, ist das TBitmap-Objekt. ;) Hier ein Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  Images: array[0..9] of TBitmap;

// Form-Create
begin
  for i := 0 to 9 do // für alle Bitmaps
    Images[i] := TBitmap.Create; // Objekt erzeugen

// Form-Destroy
begin
  for i := 0 to 9 do // für alle Bitmaps
    Images[i].Free; // Objekt freigeben

// Laden
begin
  Image[0].LoadFromFile('C:\Bild.bmp');

Ungetestet runtergetippt und nicht c&p-geeignet, also bitte etwas selber denken. ;)

//EDIT: Ah, sehe gerade, du willst eine Folge von Bitmaps in eine Datei schreiben. OK, das ist schon etwas schwieriger; deshalb solltest du dich mal mit Suche in: Delphi-Forum, Delphi-Library TFILESTREAM beschäftigen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Jazzalex Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Fedora Core 3, Winx XP

BeitragVerfasst: Mo 21.08.06 11:40 
ja - genau das stellt sich jetzt als Problem heraus. Klar, nehme ich ein TBitmap-Array und speichere es im File, werden ja nur die Pointer abgespeichert. Insofern schaue ich mir mal TFilestream an und melde mich wieder.

Danke an Euch beide - bis zum nächsten neuen Thread

-- A l e x