AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Image soll über einen pointer jpeg anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Image soll über einen pointer jpeg anzeigen

Ein Thema von Hyperspacer · begonnen am 8. Okt 2009 · letzter Beitrag vom 9. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#1

Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 11:39
Hallo,
Ich möchte in einem TImage ein jpg (TJpegImage) anzeigen lassen. Das fuinktioniert doch mit folgendem Code, oder?
NewImage.Picture.Assign(jpg); Das Problem ist jetzt, dass ich das jpeg nicht direkt vorliegen habe, sondern als pointer. Und egal wie ich es drehe, ich erhalte am Ende statt des Bildes meine Lieblingsfehlermeldung: Zugriffsverletzung.

Delphi-Quellcode:
Var
  pointer : pJPEG; // pJPEG = ^TJpegImage; Wird als Funktionsparameter übergeben
  jpg : TJpegImage;
  NewImage : TImage;
begin
  // Image erstellen
  NewImage := TImage.Create(TabBilder); // TabBilder ist ein TTabSheet in einem PageControl
  NewImage.Parent := TabBilder;

  NewImage.Top := 5;
  NewImage.Left := 5;
              
  NewImage.AutoSize := true;

  // Bild laden
  If pointer <> nil
    then jpg := pointer^;

  // Bild anzeigen
  NewImage.Picture.Assign(jpg);
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.135 Beiträge
 
Delphi 12 Athens
 
#2

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 11:50
Zitat:
sondern als pointer.
Wer kommt denn bitte auf soeine (Tschuldschung für die Wortwahl) schwachsinnige Idee?

Ein Objekt ist doch schon ein Zeiger, wozu also nochmal ein Zeiger/Pointer auf diesen Zeiger?


PS: bist du dir mit dem Pointer auch wirklich sicher?

Jedenfalls würde es so funktionieren, wenn es denn wirlich ein Zeiger auf eine Objektvariable und das entspechende Objekt auch OK wäre.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#3

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:06
Zitat von himitsu:
Zitat:
sondern als pointer.
Wer kommt denn bitte auf soeine (Tschuldschung für die Wortwahl) schwachsinnige Idee?
weil ichs nicht besser weiß..

ich glaube, dass mein problem darin liegt, dass das jpg, auf das der zeiger zeigt, in einer anderen funtkion als lokale variable erzeugt wird. Das sieht so aus:
Delphi-Quellcode:
jpg := TJpegImage.Create;
jpg.LoadFromStream(tmp);

new(pointer);
pointer^ := jpg;

jpg.Free;
Wird dann das jpg aus dem speicher gelöscht und mein pointer zeigt auf eine stelle im speicher, die eigentlich freigegeben ist? Ich dachte das Problem hätte ich mit dem new() umgangen..
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:17
Du weist deinem Pointer ja genau die Speicherstelle zu, auf die jpg zeigt, so dass im pointer und in jpg nachher der selbe wert steht (jpg ist auch nur ein pointer). Dann gibst du jpg frei, und es passiert genau das was du beschrieben hast. Das new() hat hier keine Wirkung, da du ja sofort danach etwas anderes zuweist. Du kopierst ja nirgends die Daten auf die jpg zeigt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#5

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:30
Aber wenn ich die Stele so abänder, bekomme ich immer noch an der gleichen Stelle wie vorher eine Fehlermeldung:
Delphi-Quellcode:
jpg := TJpegImage.Create;
jpg.LoadFromStream(tmp);

pointer := @jpg;
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:37
Warum machst du das eigentlich so umständlich über einen Pointer, zeig mal die ganze Funktion, vielleicht kann man dir dann ehr helfen, indem man das ganze ein wenig anders löst.
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#7

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:46
Es geht letztlich darum:
Ich lade jpegs aus MP3 Tags unbestimmt vieler Dateien. Diese ganzen dateien werden in einer liste (TListView) angezeigt. wenn ich in der liste rechts auf eine datei klicke öffnet sich ein fenster mit den details zu dieser datei. und dort soll dann eben auch das jpeg angezeigt werden.
mit einem pointer löse ich das, da ein eintrag in tlistview als data nunmal gerne einen pointer haben möchte.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:58
Dann caste das ganze doch einfach beim Zuweisen auf den ListView-Eintrag als Pointer und beim auslesen wieder zu TJPEGImage, wobei das nicht mal zwingend notwendig sein sollte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.135 Beiträge
 
Delphi 12 Athens
 
#9

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 18:59
hier zeigt der Pointer auf die Variable
pointer := @jpg; und wenn du später auf das Bild zugreifen willst, dann muß diese Variable noch existieren, was sie wohl nicht mehr tut

wie gesagt, ein Objekt ist im Prinzip auch ein Zeiger, also brauchst du diesen einfach nur umzuwandeln (typcasting)
p := Pointer(jpg); wenn du nun später wieder das Object haben willst, dann einfach umgekehrt
jpg := TJpegImage(p); [add]
Zitat:
Delphi-Quellcode:
// Bild laden
If pointer <> nil
  then jpg := pointer^;

// Bild anzeigen
NewImage.Picture.Assign(jpg);
PS: Was passiet eigentlich, wenn pointer (es ist etwas unglücklich gewählt, wenn eine Variable wie genauso ein bekannter Typ heißt) NIL ist?
Dann ist nach dem IF das jpg undefiniert und .Assign wird vermutlich mit einer netten exception reagieren

da wäre dieses schon besser:
NewImage.Picture.Assign(TJpegImage(_pointer_));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#10

Re: Image soll über einen pointer jpeg anzeigen

  Alt 8. Okt 2009, 19:14
jetzt geht es.
aber ich verstehe nicht wo der unterschied zwischen
pointer := @jpg; und
p := Pointer(jpg); ist...
  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 14:02 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