AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TImage wird bei Zugriff auf Height /Width gelöscht ?
Thema durchsuchen
Ansicht
Themen-Optionen

TImage wird bei Zugriff auf Height /Width gelöscht ?

Ein Thema von Niotronic · begonnen am 2. Nov 2013 · letzter Beitrag vom 2. Nov 2013
Antwort Antwort
Niotronic

Registriert seit: 5. Okt 2010
Ort: Graz
7 Beiträge
 
Delphi 2010 Architect
 
#1

TImage wird bei Zugriff auf Height /Width gelöscht ?

  Alt 2. Nov 2013, 14:25
Hallo,

ich arbeite gerade an eine Prozedur, welche über einen Stream eine Bilddatei (bmp, jpeg, png, etc.) aus dem Blobfeld einer datenbanktabelle liest, dann das Grafikformat bestimmt, damit das entsprechende TGraphic Objekt erstellt, die Bilddatei aus dem Stream in das TGraphic lädt und anschließend einem TImage zur Anzeige zuweist. Funktioniert tadellos, solange NACH der Zuweisung die Zeile "LBSizeValue.Caption:=inttostr(SitePlanImage.Pictu re.BitMap.Width)+' x '+inttostr(SitePlanImage.Picture.Bitmap.Height); ", welche eigentlich nur auf Höhe und Breite der Bitmap zugreift !! NICHT !! aufgerufen wird. Mit anderen Worten diese Zeile (am Ende der untenstehenden Prozedur) löscht offenbar das TImage (bzw. Bitmap) wieder...
Bin im Moment ratlos...

Danke schon mal für eure Vorschläge!

Gruß,

Klaus

procedure TFSitePlanImageEditor.ShowSitePlan(SitePlanName: string);
var LastCursor: TCursor;
AStream: TMemoryStream;
GraphicClass: TGraphicClass;
Graphic: TGraphic;
begin
LastCursor:=Screen.Cursor;
Screen.Cursor:=crHourglass;
AStream:=TMemoryStream.Create;
try
DataBase.ReadSitePlan(SitePlanName, AStream);
if not FindGraphicClass(AStream.Memory^, AStream.Size, GraphicClass) then
raise EInvalidGraphic.Create('Invalid graphic format');
Graphic := GraphicClass.Create;
AStream.Position := 0;
Graphic.LoadFromStream(AStream);

SitePlanImage.Picture.Assign(Graphic);

finally
AStream.Free;
Graphic.Free;
end;
Screen.Cursor:=LastCursor;

//************* Diese Zeile löscht das Image wieder ???
//LBSizeValue.Caption:=inttostr(SitePlanImage.Pictur e.BitMap.Width)+' x '+inttostr(SitePlanImage.Picture.Bitmap.Height); //this clears the image ????????????????????
//**************
end;
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TImage wird bei Zugriff auf Height /Width gelöscht ?

  Alt 2. Nov 2013, 14:29
Bitte schließ deine Codes in das [DELPHI]-Tag ein, damit man den Code auch lesen kann. (der Button mit dem Helm)


Soo, wenn du auf .Bitmap zugreifst, dann wird dabei intern auch dafür gesorgt, daß auch ein TBitmap in .Picture drin ist.
Das heißt, daß notfalls die Grafik gelöscht und durch eine TBitmap-Instanz ersetzt wird.

Lösung: Nicht auf .Bitmap zugreifen, wenn kein TBitmap drin ist.
> .Graphic
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Niotronic

Registriert seit: 5. Okt 2010
Ort: Graz
7 Beiträge
 
Delphi 2010 Architect
 
#3

AW: TImage wird bei Zugriff auf Height /Width gelöscht ?

  Alt 2. Nov 2013, 14:44
Danke - hat funktioniert - ich greife dann statt auf .Bitmap.height etc. auf die entsprechenden properties von TPicture zu.
Ich dachte dass intern immer alles in einem TBitmap landet...

Gruß,

Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: TImage wird bei Zugriff auf Height /Width gelöscht ?

  Alt 2. Nov 2013, 14:59
Nee, genauso wie du du mit Graphic := GraphicClass.Create; , erstellt sich TPicture intern eine Kopie deiner an Assign übergebenen, bzw. an TPicture.Graphic zugewiesenen, Instanz.

TPicture ist praktisch nur ein Kontainer, welcher direkt die entsprechende TGraphic-Instanz enthält, welche man dort reinpackt.

.Bitmap und .Icon sind nur direkte Zugriffe auf bestimmte Typen, ohne daß man sich .Graphic erst in diesen Typen casten muß.
Beim Zugriff auf einen falschen/anderen Typen gibt es aber leider keine Exception, sondern der Typ wird einfach angepaßt, ohne den Bildinhalt in die neue Instanz zu kopieren. (wobei das Kopieren eh nicht immer geht, da z.B. ein TBitmap mit den Transparenzen von Icon, PNG und Co. nicht umgehen kann)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 13:54 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