![]() |
Gibt es eine Image.picture.bitmap?
Hallo,
wenn ich (mit GraphicEx) verschiedene Bilder in Image.picture.graphic lade, gibt es auch für verschiedene Formate ein Image.picture.bitmap. Für einige Formate aber nicht (z. B. jpg, zumindestens, wenn es nicht per GraphicEx geladen wird.) Wie bekomme ich nun heraus, ob es eine Bitmap dazu gibt oder nicht? Assigned(Image.picture.bitmap) macht es nicht. Image.picture.bitmap.handle<>0 macht es (!), aber nach dieser (nur) Abfrage funktioniert das Image selber nicht mehr! (Z. B. Image.refresh) Wie geht es? Gruß Mattze |
Re: Gibt es eine Image.picture.bitmap?
Meinst Du Image.Picture.Graphic.Empty?
|
Re: Gibt es eine Image.picture.bitmap?
Nee,
ich glaube nicht! Noch mal am konkreten Beispiel zum Problem: Ich lade eine png-Graphic per GraphicEx in Image1.picture.graphic. Diese Graphic hat (komischerweise) eine Bitmap-Entsprechung in Image1.picture.bitmap. (Z. B. kann man da ohne Probleme Image2.picture.assign(image1.picture.bitmap) machen! Ich lade jpg (ohne GraphicEx). Da gibt es keine Bitmap-Entsprechung (Image1.picture.bitmap.handle=0). Wie kriege ich im geladenen Image1 raus, ob es nun eine Bitmap hat oder nicht? Sobald ich Image1.picture.bitmap (.handle<>0) abfrage, ist Image1 nicht mehr "bedienbar". Z. B. geht dann kein image1.refresh mehr! Gruß Mattze |
Re: Gibt es eine Image.picture.bitmap?
Hi,
Ich denke mal das kannst du rausbekommen mit
Delphi-Quellcode:
oder auch ClassType. Je nachdem wies dir besser passt ;)
Image.Picture.Graphic.Classname
|
Re: Gibt es eine Image.picture.bitmap?
Hi,
Delphi-Quellcode:
Das Phänomen kommt daher, dass GraphicEx seine Bildklassen alle von TBitmap abgeleitet hat (bzw. von ein Nachfahre von TBitmap dient als Basisklasse bei GraphicEx).
if Image.Picture.Graphic is TBitmap then ...
TPicture.Bitmap ist nur "belegt", wenn es sich bei Graphic um eine TBitmap handelt. ClassName würde den Namen des Nachfahren liefern... Mfg FAlter |
Re: Gibt es eine Image.picture.bitmap?
Ginge das nicht auch einfach mit dem is-Operator?
|
Re: Gibt es eine Image.picture.bitmap?
Danke,
mag ja alles stimmen, aber nun verstehe ich rein gar nichts mehr! Vergesst mal bitte GraphicEx. Formular mit 2 Image, 3 Button und ein OpenPictureDialog (OPD). (Das Label ist nur so, damit ich weiß, was ich ausgewählt habe.) Die Click-Events. Das ganze bitte mit JPG probieren, wenn Ihr wollt.
Delphi-Quellcode:
Mit Button1 wird das jpg-Bild nach Image1 geladen.
procedure TForm1.Button1Click(Sender: TObject);
begin if OPD.Execute then begin label1.caption:=OPD.FileName; image1.Picture.LoadFromFile(opd.filename); end; end; procedure TForm1.Button2Click(Sender: TObject); begin if not image1.Picture.Bitmap.empty then begin image2.Picture.Bitmap.Assign(image1.Picture.bitmap) end else begin showmessage('Bitmap leer'); end; end; procedure TForm1.Button3Click(Sender: TObject); begin showmessage('Test'); end; Button2 testet, ob eine Bitmap da ist und lädt diese in image2. (Quatsch, da es bei JPGs ja keine gibt. Habe ich nur vergessen, rauszunehmen.) Falls es keine gibt (also bei JPG) wird eine Message angezeigt, die etwas von Image1 verdeckt. (Wichtig!) Wird diese message "weggeclickt", wird Image1 nicht aktualisiert, refreshed, invalidated... Es bleibt ein grauer (Hintergrund-)kasten. Nehme ich statt dessen Button3, wird auch nur eine Message angezeigt, die Image1 genauso überdeckt. Wird die weggeclickt, wird Image1 ordentlich "aktualisiert", wie es sich gehört. Was mache ich falsch? Gruß Matthias |
Re: Gibt es eine Image.picture.bitmap?
Hallo,
ich habe natürlich weitergespielt. Und so geht es:
Delphi-Quellcode:
Finde ich aber trotzdem unbefriedigend. Vor allen Dingen ärgert mich, dass ich nicht weiß, warum es andersch (sprich: direkt) nicht geht.
procedure TForm1.Button2Click(Sender: TObject);
var pic: TPicture; begin pic:=TPicture.Create; try pic.Assign(image1.picture); if not pic.bitmap.empty then begin image2.Picture.Bitmap.Assign(image1.Picture.bitmap) end else begin showmessage('Bitmap leer'); end; finally pic.Free end; end; Gruß Mattze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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