Bild im Panel als Bitmap speichern

Octalus

Grünschnabel
Hi,

Ich versuche jetzt schon eine geraume Zeit ein im Panel1 befindliches Bild als externe Datei zu speichern... bmp oder jpg wäre egal ...
Wenn ich eine Variable :
bmp : TImage;
deklariere, weiß ich einfach nicht, wie ich von dem TWinControl(panel) das Bild in dieses TImage bekomme, um es danach mit bmp.picture.Bitmap.SaveToFile('test.bmp');
zu speichern.

Kann mir jemand helfen? Ich komme mit diesem Typenproblem nich klar...

Danke im Vorraus
Marcus
 
Was meinst du mit "in einem Panel befindliches Bild"? Ein Bild kann nicht in einem Panel sein. In einem Panel können nur Steuerelemente sein. Ein Bild ist kein Steuerelement. Wenn du damit sagen willst, dass du ein TImage in deinem Panel drin hast, dann weiß ich nicht, wieso es Probleme beim Speichern des Bildes gibt. Beschreib dein Problem näher!

Übrigens: Ein TPicture verfügt selbst über eine SaveToFile()-Methode. Du musst dafür nicht auf das TBitmap-Member zugreifen.

Gawayn
 
Also ich hab da schon ein bischen mehr herausgefunden:

Erst einmal handelt es sich um einer Mediaplayer-Componente die dort im Panel1 einen Film abspielt.

nun hab ich es geschafft mit:

procedure TForm7.Button2Click(Sender: TObject);
var Bitmap1 : TBitmap;
DC:HDC;
begin
DC:=GetDc(Panel1.Handle);
Bitmap1:=TBitmap.Create();
Bitmap1.Width:=Panel1.Width;
Bitmap1.Height:=Panel1.Height;
mediaplayer1.Display.PaintTo(Bitmap1.Canvas,0,0); BitBlt(Bitmap1.Canvas.Handle,0,0,Panel1.Width,Panel1.Height,DC,0,0,SRCCOPY);
Bitmap1.SaveToFile('C:\test.bmp');
end;

dass er von AVIs das Pic im Panel1 speichert, so wie ich es haben wollte.

Wenn ich das jetzt aber bei Mpgs probiere speichert er mir nur ein schwarzes Bild... kann mir jemand sagen wie ich bei Mpegs vorgehen kann?
 
Das ist leider komplizierter. Um einen Frame aus einem MPG auszulesen, genügt es nicht, über einen DC den Bildspeicher auszulesen. Dafür ist es wohl das beste, wenn du mit Video For Windows oder DirectShow den MPEG-Stream ausliest. Mit einer Mediaplayer-Komponente wird das nichts -- mir sind keine Workarounds bekannt. MSDN hat die nötigen Referenzen und Beispiele.

Gawayn
 
hmm könntest du mir nich irgendwie n link geben für mein problem oder sowas?

ich hab keine ahnung wo ich da jetzt ansetzen soll... :(
 
Da ich selbst mich nie eingehend mit VFW oder DirectShow beschäftigt habe, kann ich dir keine weitergehenden Ratschläge geben außer den Links:

Video for Windows
DirectShow

Diese Seiten enthalten so ungefähr alles, was es zum Thema zu wissen gibt.

Gawayn
 
Also nur für diejenigen, die das selbe oder ein ähnliches Problem haben:
ich habe einen Quellcode für den ActiveMediaplayer im netz gefunden, den man direkt in seinen Code implementieren kann.

Bei diesem Player hat man die Option, das störende Overlay zu deaktivieren, damit man danach, wie oben im Quellcode beschrieben, das Bild mit BitBlt lesen kann.

Wer diesen Playersource auch braucht einfach Mail an mich

Danke trotzdem
Marcus
 
Zurück