![]() |
TImage wird bei Zugriff auf Height /Width gelöscht ?
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; |
AW: TImage wird bei Zugriff auf Height /Width gelöscht ?
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 |
AW: TImage wird bei Zugriff auf Height /Width gelöscht ?
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 |
AW: TImage wird bei Zugriff auf Height /Width gelöscht ?
Nee, genauso wie du du mit
Delphi-Quellcode:
, erstellt sich TPicture intern eine Kopie deiner an Assign übergebenen, bzw. an TPicture.Graphic zugewiesenen, Instanz.
Graphic := GraphicClass.Create;
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz