TMediaPlayer nesnesinden image yakalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
huradem
Üye
Mesajlar: 5
Kayıt: 26 Ağu 2003 04:29
Konum: İstanbul

TMediaPlayer nesnesinden image yakalama

Mesaj gönderen huradem »

TMediaPlayer nesnesinde yürütülmekte olan videonun o anki görüntüsünü, image olarak nasıl yakalanır.
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Yakalanabilir mi hiç denemedim ama aklıma gelen ilk şey o andaki ekranı veya pencereyi capture ederek (printscreen olayı yani) formunun veya componentinin boyutları alıp kopyalamak al işte sana capture...

Saygılar
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Media Player

Mesaj gönderen warder »

MediaPlayer e içerden erişilirmi bilmiyorum.
PrintScreen de programlama forumuna uygun bir yanıt değil gibi geldi.
BitBlt, StretchBlt apilerini incelemenizi ve eğer varsa msdn 2003 te, yoksa microsoft un sitesinde araştırmanızı tavsiye ederim.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

warder dostum bir program yazmanın 10 yolu her zaman vardır, belki daha fazlası da bulunabilir. ben işyerinde o an aklıma gelen en basit bir fikrimi yazdımki bu işlem için de windows apisi kullanılıyo. Dolayısıyla sen de bir api çözümü getirmişsin. Madem karalıyorsun Programlama Forumuna yakışmaz diyorsun buyur yaz kodu :)

Herşey sevgi, saygı ve hoşgörü ile
Saygılar
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Mesaj gönderen warder »

MicroChip yazdı:warder dostum bir program yazmanın 10 yolu her zaman vardır, belki daha fazlası da bulunabilir. ben işyerinde o an aklıma gelen en basit bir fikrimi yazdımki bu işlem için de windows apisi kullanılıyo. Dolayısıyla sen de bir api çözümü getirmişsin. Madem karalıyorsun Programlama Forumuna yakışmaz diyorsun buyur yaz kodu :)

Herşey sevgi, saygı ve hoşgörü ile
Saygılar
Sizi üzmeyi planlamamıştım.
foruma yeni üye olduğum gibi kimseyi ve kapasitesini tanımıyorum. Sizin öneriniz eleştiriyi hakeden bir içeriğe sahipti. bende hak eden kısmına değindim. Bunun sizinle alakası yok. Yaptığınız işle kişiliğinizi birleştirmeyin lütfen.
Yaptığınız işi beğenmemek kişiliğinizi beğenmemek değildir. işiniz eleştiri almıştır kişiliğiniz değil.
Burada "mp3 nasıl çalınır" diyene "winapı indir" demek eleştirilmelidir.
Diğer taraftan ben C ve Cpp programcısıyım. Soru sahibinin tam istediği gibi olmasada ekranın herhangi bir koordinatının fotoğrafını alıp değerlendiren özel çalışmam var. bu çalışmadan soru sahibinin işine yarayacağını umduğum denenmiş apileri önerdim. Kaynak gösterdiğim msdn veya ms nin sitesinde örnek mevcut. Delphiye çevirmek ona kalmış. Balık tutmak programcıyı geliştirir. printscreen balık satın almak olabilir, tabii benim kod yazmam da. Üstelik bunlar etraflı apiler kavramadan kullanılmaz.
Yinede üzdüğüm için üzgünüm.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

MicroChip yazdı:Yakalanabilir mi hiç denemedim ama aklıma gelen ilk şey o andaki ekranı veya pencereyi capture ederek (printscreen olayı yani)
selamlar hocam,bu yöntem vb5 de işe yaramıyordu.. capture yalnız formun görüntüsünü alıyordu, diğer active screen bileşenlerini almıyordu..
zamanında open source bir webcam capture programı bulmuştum.. onunla becerebilmiştim.

bu tarz bi örnek ararsanız, faydalı olabilir.

EK : programı buldum
http://sourceforge.net/projects/avinwebcam/
ben kaynak olarak tv kartını gösterip televizyon görüntüsü almıştım
:D
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
MediaPlayer in display ini form1 in üzerinde belirlediğin bir rectangle in içinde gösteriyorsan;

Kod: Tümünü seç

procedure TForm1.ResimKesClick(Sender: TObject);
var
newRect:trect;
begin
newRect.Left :=5;
newRect.Top:=5;
newRect.Right:=250;
newRect.Bottom:=250;
 with Image1.Canvas do
  begin
 CopyMode := cmMergeCopy	;
    CopyRect(newRect, form1.Canvas, newRect);
    end;
image1.Picture.SaveToFile('c:\test.bmp');
end;
Yukardaki kod butona bastığın anda mediaPlayer in karesini bmp formatında kaydeder.
saygılar
huradem
Üye
Mesajlar: 5
Kayıt: 26 Ağu 2003 04:29
Konum: İstanbul

Mesaj gönderen huradem »

hakkus yazdı: Yukardaki kod butona bastığın anda mediaPlayer in karesini bmp formatında kaydeder.
Merhabalar,
Yukarıdaki kodla formun istediğim karesini alabiliyorum. Görüntüyü bir panel üzerinde gösteriyorum. Lakin görüntünün gösterildiği kısım siyah çıkıyor. Durdurup, alıp, tekrar çalıştırmayı denedim. Ama olmadı.

Webcam'den capture yapabiliyorum.
Ama benim istediğim daha önce kaydedilmiş, o an yürütülmekte olan bir videodan görüntü yakalamak.

Yukarıdaki kod işe yarayacak gibi ama neden siyah çıkıyor.
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

valla dostum neden siyah çıktığını söyliyeyim :) tmediaplayer activex kullandığından dolayı bu kullanılan yöntemlerle hep siyah alırsın. Sebebi de activeX. hatta ben printscreen olayından bahsetmiştim ya onu yapsan da siyah alırsın.
bak mege bir link yazmış onu denemeni tavsiye ederim.
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Önceki mesajda yazdığım kod, eğer mediaPlayer in display i olarak form1 in belli bir yerini kullanırsan işe yarar. Sizdeki sorun display için panel kullanmanızdan kaynaklanıyor.
Bunun için formuna iki buton (PlayBtn, ResimKes) ve bir image (image1) koyup ve aşağıdaki kodu eklersen sorunun çözülür;

Kod: Tümünü seç

procedure TForm1.PlayBtnClick(Sender: TObject);
var
newRect:trect;
begin
newRect.Left :=5;
newRect.Top:=5;
newRect.Right:=250;
newRect.Bottom:=250;
form1.Canvas.Rectangle(5,250,250,5);
MediaPlayer1.Display:=form1;
MediaPlayer1.DisplayRect:=newRect;
MediaPlayer1.Play;
end;
//
procedure TForm1.ResimKesClick(Sender: TObject);
var
newRect:trect;
begin
newRect.Left :=5;
newRect.Top:=5;
newRect.Right:=250;
newRect.Bottom:=250;
 with Image1.Canvas do
  begin
 CopyMode := cmMergeCopy	;
    CopyRect(newRect, form1.Canvas, newRect); 
    end;
image1.Picture.SaveToFile('c:\test.bmp');
end;
Kolay gelsin
saygılar
Cevapla