Update Problem bei TImage
Hallo,
ich habe folgendes Problem: Ich benutze ein TImage-Objekt (Form1.Image1), in dem JPEGs angezeigt werden, wobei sich das JPEG ständig ändert (eine Art 'pseudo' stream). Ich möchte nun auf Button-Click den aktuellen Kontent in ein zweites TImage (img) kopieren, um es aus dem dann ggfs. später abzuspeichern. Habe dafür folgendes getan:
Delphi-Quellcode:
Da ganze klappt allerdings nur eingeschränkt und zwar tritt der folgende Effekt auf: das 2. TImage zeigt immer nur das erste (also das per Object-Inspector zugewiesene) Bild des anderen TImage Objektes an - alle anderen (nachgolgenden) Bilder werden ignoriert.
img.Picture.Assign(Form1.Image1.Picture);
img.Picture.SaveToFile('c:\temp\bla.jpg'); Was mache ich falsch ? Liegt es etwa daran, dass ich JPEGs statt Bitmaps verwende ? Oder muss ich das TImage noch refreshen oder updaten ? Vielen Dank </bjoern> |
Re: Update Problem bei TImage
Grundsätzlich würde ich mit 2 TBitmaps arbeiten, die im Hintergrund alles erledigen, und den TImages nur per "Assign" zuweisen. Ein TBitmap hat ja auch ein "SaveToFile", und ich hatte bisher keine Last mit einem derartigen Problem. Vielleicht hilfts!
gruss, dizzy |
Re: Update Problem bei TImage
Delphi-Quellcode:
Vielleicht hilft es. Der "Denkfehler" an der Sache ist das nach dem .Assign() beie TImages auf ein und das selbe TJpegImage verweisen. Eine Änderung an einem der TJpegImage in beiden TImage's wird also BEIDE TImages betreffen.
img.Picture.Assign(Form1.Image1.Picture);
img.Picture.Dormant; img.Picture.SaveToFile('c:\temp\bla.jpg'); Gruß hagen |
Re: Update Problem bei TImage
Hallo,
danke für deinen tip - problem ist nur, dass ich in dem 1. TImage halt JPEGs darstellen muss, da ich sie von einem Webserver bekomme. Gruss </bjoern> |
Re: Update Problem bei TImage
Ööööhm, ein TImage kann von Hause aus mit jpeg's nichts anfangen, oder!? Also muss da doch schon eine Konvertierung stattfinden. Also warum nicht an ein TBitmap?
@Hagen: Hmmm, also ich habe jetzt schon des öfteren mit mehreren Puffer-Bitmaps gearbeitet. Und diese waren nach einen jeweiligen Assign + einer Zeichenoperation nicht mehr gleich. Verhält sich TBitmap die anders als TImage.TPicture.TBitmap? Sollte mich wundern. Oder bewirkt das Zeichnen die "reale" Trennung? Oder bin ich einfach nur zu müde, um mich recht zu erinnern? *nichglaub* ;) gruss, dizzy |
Re: Update Problem bei TImage
Zitat:
Denke, du meinst "img.Picture.Bitmap.Dormant;" oder ? Hat jetzt den Effekt, dass das 2. TImage gar nicht mehr anzeigt, oder mach ich was falsch ? </bjoern> |
Re: Update Problem bei TImage
@dizzy:
Also ich kann ohne Probleme Zuweisungen wie
Delphi-Quellcode:
machen...
Jim: TJPEGImage;
{ some intelligent code here ... } Image1.Picture.Graphic:=Jim; Gruss </bjoern> |
Re: Update Problem bei TImage
Tja das is'es wieder, das Problem mit den TJpegImages und deren ziemlich abgespecktem Interface. Leider unterstützen die TJpegImage's nicht alle wichtigen Features.
Am besten mal folgendes probieren
Delphi-Quellcode:
Statt Img zu speichern, wird es nur zur Anzeige benutzt. Wir speichern aus Image1 heraus.with Img.Picture.Bitmap do begin Width := Image1.Picture.Width; Height := Image1.Picture.Height; Canvas.Draw(0, 0, Image1.Picture.Graphic); end; Image1.Picture.SaveToFile(...); Gruß Hagen |
Re: Update Problem bei TImage
@negaH:
Hmmm...bringt leider auch nicht viel - gleicher Effekt, es wird nicht das aktuelle Bild kopiert oder angezeigt oder abgespeichert. Sieht so aus als würde in den internen Buffern der 1. TImages nicht der aktuelle Inhalt, der aber auf dem Bildschirm ausgegeben wird, stehen - aber das kann doch gar nicht sein oder ? Wenn ich mittels
Delphi-Quellcode:
speichere, bekomme ich auch nicht das aktuelle Bild...
Form1.Image1.Picture.SaveToFile('c:\temp\huhu.jpg');
Das jeweils neue JPEG schreibe ich übrigens via
Delphi-Quellcode:
Gruss
Jim: TJPEGImage;
Image1.Picture.Graphic:=Jim; </bjoern> |
Re: Update Problem bei TImage
Versteh ich nicht. Nachdem du das JPEG geladen hast zeigst du es mit Image1.Picture.Gpahic an. Somit müsste man mit Image1.Picture.SaveToeFile() diese auch sofort wieder speichern können.
Ich habe nun schon einiges mit TImage + TJpegImage + TBitmap gemacht, aber sowas ist mir noch nie untergekommen. Hast du eventuell an andere Stelle, eg. Events von TImage1 etc, was stehen ? Vielleicht solltest du auch das originale TJpegImage das geladen wurde sofort speichern. Ah, da fällt mir ein, arbeitest du mit Threads ? heist werden die Lade-,Anzeige-, Speicher-Operation in unterschiedlichen Threads ausgeführt ? Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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