Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Update Problem bei TImage (https://www.delphipraxis.net/15111-update-problem-bei-timage.html)

bdaehn 22. Jan 2004 00:38


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:
img.Picture.Assign(Form1.Image1.Picture);
img.Picture.SaveToFile('c:\temp\bla.jpg');
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.

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>

dizzy 22. Jan 2004 00:44

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

negaH 22. Jan 2004 00:47

Re: Update Problem bei TImage
 
Delphi-Quellcode:
img.Picture.Assign(Form1.Image1.Picture);
img.Picture.Dormant;
img.Picture.SaveToFile('c:\temp\bla.jpg');
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.

Gruß hagen

bdaehn 22. Jan 2004 00:47

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>

dizzy 22. Jan 2004 00:56

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

bdaehn 22. Jan 2004 00:58

Re: Update Problem bei TImage
 
Zitat:

Zitat von negaH
Delphi-Quellcode:
img.Picture.Assign(Form1.Image1.Picture);
img.Picture.Dormant;
img.Picture.SaveToFile('c:\temp\bla.jpg');
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.

Gruß hagen

Danke! Gerade einmal ausprobiert!

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>

bdaehn 22. Jan 2004 01:02

Re: Update Problem bei TImage
 
@dizzy:

Also ich kann ohne Probleme Zuweisungen wie

Delphi-Quellcode:
  Jim: TJPEGImage;

  { some intelligent code here ... }

  Image1.Picture.Graphic:=Jim;
machen...

Gruss
</bjoern>

negaH 22. Jan 2004 01:08

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:

  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(...);
Statt Img zu speichern, wird es nur zur Anzeige benutzt. Wir speichern aus Image1 heraus.

Gruß Hagen

bdaehn 22. Jan 2004 01:17

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:
Form1.Image1.Picture.SaveToFile('c:\temp\huhu.jpg');
speichere, bekomme ich auch nicht das aktuelle Bild...

Das jeweils neue JPEG schreibe ich übrigens via

Delphi-Quellcode:
Jim: TJPEGImage;
Image1.Picture.Graphic:=Jim;
Gruss
</bjoern>

negaH 22. Jan 2004 01:23

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 09:08 Uhr.
Seite 1 von 2  1 2      

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