2009-03-14 26 views
11

Bir dizi ekran görüntüsü almam ve bunları bir filme yapıştırmam gerekiyor. Ekranı yakalamak için java Robot sınıfını kullanmaya çalışıyorum.Java Robot Oluştur ekranCepture performansı

Ancak, createScreenCapture() yönteminin makinemde 1 saniyeden fazla sürmesi gerekir. 1 fps bile alamıyorum. Hızlandırmak için bir yolu var mı? Yoksa başka bir API var mı?

Düzenleme: Tamponlanmış bir görüntü ayırıyor.

BufferedImage image = robot.createScreenCapture (ekran); // Ekran görüntüsünü jpg olarak kaydet
Dosya = new File ("images/screen" + index + ".jpg");
ImageIO.write (resim, "jpg", dosya); index ++;

Jpg dosyasına yazmak, BufferedImage'ın yaklaşık 1400 ms sürdüğü yerdir.

cevap

2

Bunun için C veya C++ ile devam etmenizi öneririm, donanıma daha çok doğrudan erişimi vardır.

Mutlak maksimum performansın sürücü seviyesine gelmesini istiyorsanız ve sadece verileri video kartından çıkartın. Böyle bir sürücü bulmak zordur, çünkü ekrana giderken verileri yakaladığı için kopya korumasını kolayca yenmek için kullanılabilir.

Ama Java ve Robot ile uğraşmanız gerekiyorsa, bu kadar uzun süren bir işlev çağrısı olduğundan emin misiniz? BufferedImage veya başka bir şey ayırmıyor mu?

+0

Evet 'createScreenCapture()' 'BufferedImage' öğesini ayırır ve tüm pikselleri çoğu zaman alan 'INT_RGBA' biçimine dönüştürür. – finnw

1

Farklı ekran ayarlarıyla denemeyi deneyin. Renk derinliği, AWT'nin her şeyi ortak bir tarama formatına dönüştürmesi gerektiğinden etkileyecektir. Benim PC'den

Bazı örnek zamanlamaları: O derinliklerde ile test edemiyoruz bu yüzden

Resolution | Depth | Time taken 
------------+-------+------------ 
1280x1024 | 32 | 215ms 
1280x1024 | 16 | 155ms 
1600x900 | 32 | 235ms 

Benim adaptör 24bpp veya 64bpp yapamaz, ama onlar dönüştürülmesi daha fazla CPU döngülerini gerektirecektir tahmin ediyorum.