Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage EAccessViolation (https://www.delphipraxis.net/119456-timage-eaccessviolation.html)

Neutral General 27. Aug 2008 10:19

Re: TImage EAccessViolation
 
Hi,

Dazu sollte man erwähnen, dass er die Unit "contnrs" einbinden muss.

Gruß
Neutral General

DeddyH 27. Aug 2008 10:33

Re: TImage EAccessViolation
 
Das steht aber in der Hilfe (und die ist unter Delphi 6 ja noch zu gebrauchen ;)).

Schwedenbitter 27. Aug 2008 18:00

Re: TImage EAccessViolation
 
Das mit der TObjectList habe ich jetzt eingebaut. Leider aber nicht richtig. Denn ich bekomme jetzt eine Zugriffsverletzung. Syntaxfehler kann ich nicht ausmachen. Der Code wird ohne zu murren kompiliert.

So funktionierte es ...
Delphi-Quellcode:
Procedure Speichern;
Var
   PNG :TPNGObject;
Begin
   // Vom Scanner holen
   // Image1 ist vom Typ TImage
   // Image ist vom Typ TBitmap
   Image1.Picture.Assign(Image);
   // Speichern
   PNG.Assign(Image1.Picture.Graphic);
End;
und so funktioniert es nicht mehr ...
Delphi-Quellcode:
Procedure Speichern;
Var
   PNG :TPNGObject;
Begin
   // Bilder ist vom Typ TObjectList und wurde zuvor mit
   // Bilder:=TObjectList.Create;  sowie
   // Bilder.OwnsObjects:=True;    angelegt.
   // Image ist wieder vom Typ TBitmap
   Bilder.Add(Image);
   // Erstes Bild Speichern
   PNG.Assign(TBitmap(Bilder.Items[0]));
End;
Kleine Erklärung:
Ich wollte mit dem zweiten Beispiel nicht den Weg über TImage gehen. Zum einen ist das Bild sowieso vom Typ Bitmap. Zum anderen muss ich das Bild dann verstecken, weil TImage.Create(X); in X immer ein Argument z.B. Form1 haben will und es dort dann auch anzeigt.

Zusätzliche Frage:
Ich vermute, dass das übergeben Image nur ein Pointer ist. Es ist daher nicht auszuschließen, dass es beim nächsten Aufruf des Ereignisses durch die TWAIN den Inhalt überschreibt. Wenn ich TObjectList richtig verstehe, ist das selbst auch wieder nur eine Liste von Pointern. Wie kann ich sicher stellen, dass ich auch wirklich den Inhalt in der Liste gespeichert habe.

Wie komme ich an den Inhalt der TObjectList ran?

Gruß, Alex

DeddyH 27. Aug 2008 18:07

Re: TImage EAccessViolation
 
Außer, dass Du das TPngObject nicht anlegst, kann ich auch nichts entdecken. Und TObjectlist enthält eine Liste mit Instanzen, welche ja auch nur Pointer sind. Heran kommst Du ganz normal über den Index, ggf. musst Du halt casten.

Schwedenbitter 27. Aug 2008 18:11

Re: TImage EAccessViolation
 
Zitat:

Zitat von DeddyH
Außer, dass Du das TPngObject nicht anlegst, kann ich auch nichts entdecken.

Das mache ich schon. Ich wollte nur nicht den ganzen Code hier posten. Sind zwar nur 117 Zeilen. Aber ich will das nicht überfrachten...

DeddyH 27. Aug 2008 18:20

Re: TImage EAccessViolation
 
In welcher Zeile knallt es denn genau?

Schwedenbitter 27. Aug 2008 18:23

Re: TImage EAccessViolation
 
@DeddyH
Bei dem Code-Schnipsel in Zeile 10, weil das Object zwar da aber leer war (Siehe unten).
:cheers: Ich habe es geschafft. Mein Denkfehler (mal wieder).

Es reicht nicht, ein Object anzulegen, sondern ich muss es auch füllen! Richtig muss also so heißen:

Delphi-Quellcode:
Procedure Speichern;
Var
   PNG :TPNGObject;
Begin
   // Typen wie vor
   Bilder.Add(TBitmap.Create);
   // Und jetzt der Inhalt ...
   TBitmap(Bilder.Last).Assign(Image);
   // Erstes Bild Speichern
   PNG.Assign(TBitmap(Bilder.Items[0]));
End;
P.S.
Zitat:

10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.
Ich wäre auch nach 10 Stunden ohne probieren nicht drauf gekommen.

DANKE an ALLE


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Seite 2 von 2     12   

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