SWT:

2009-12-03 9 views
6

ben çok takdir ediyorum bir offscreenbuffer içine/arka planda Widget “işlemek” Nasıl senin tavsiye ve yardım:SWT:

nasıl AMAÇ SWT Widget/Bileşen işleyebilen (? Offscreenbuffer) ve kabuk/widget kendisini ekran görüntüsü alma :

ne anda sahip olduğu:

Display display = new Display(); 
Shell shell = new Shell(display); 
// ... 
MyWidgetComponent mwc = new MyWidgetComponent(shell, SWT.BORDER); 
shell.open(); 
Image screenshot = new Image(shell.getDisplay(), shell.getBounds()); 
GC.copyArea(screenshot, 0, 0); 
//... 

sorun Widget/Bileşeni tarafından çizildi “boyalı” piksel sabitdiskte onları kurtarmak için olsun çalışır, ancak yeni bir Windo açacak Görev çubuğunda w. Bu istemediğim bir şey.

Neyi başarmak istediğim: Bu uygulamayı tamamen arka planda bir “sunucu uygulaması” olarak çalıştırmak istiyorum (örneğin, bu dosyayı bir sunucuya gömün ve buna ekleyin). Bu nedenle, MyWidgetComponent pikselden tamamen kapalı ekran blöfünde piksel olarak oluşturulmalı ve daha sonra pikselleri alıp harddisk'e kaydediyorum ya da rendered widget'ını servlet-isteği sonucu olarak bir görüntü olarak doğrudan döndürüyorum. (Bir sunucu ortamında herhangi bir pencereyi açmak istemiyorum, bu durumda bir windows sunucusu olabilir ...). Bunu başarmak nasıl

. Çok araştırdım ama işe yaramaz bir şey buldum.

Çok teşekkür ederim! Oca

cevap

2

Ben doğrudan cevap olamaz, ama ben ile mücadele de benzer sorun haline çalıştırmak: Bu görünümden tıkalı iken bir Shell veya Widget bir ekran görüntüsünü alarak.

örneğin düşünün, pencere A pencere B örtüşür. Bir ekran kodunuzu kullanarak B yapılır:

Image screenshot = new Image(shellB.getDisplay(), shellB.getBounds()); 
GC.copyArea(screenshot, 0, 0); 

bulgularım (Ben ikinci emin olduğum halde) bu, Windows Vista, Windows 7 ve Mac OS X altında yapılabilir olduğunu ortaya koydu. Ancak, Windows XP, Linux ile GNOME ve Linux ile KDE'de, ekran görüntüsü, üst üste binen pencerenin görünümü engelleyen beyaz bir alan içerir.

Bunun için bir çözüm bulamadık ve bu davranış platformu bağımlı değil, aynı zamanda SWT oldukça adamcağız sadece şüpheli.

Gerçi ben işareti kapalı olduğumu duymak isteriz!

+0

Merhaba Paul, Cevabınız için çok teşekkürler! Cevabınız okumak için çok ilginç. Benzer bir deneyim yaptım (bu uzmanlar için açık olabilir, ama ben değil) "serveride" renderlemeyi daha da sorunlu hale getiriyor: Yukarıda açıklandığı gibi, bir pencere her zaman açılır, ama sadece bu pencere açılır. "VISIBLE/MAXIMIZED" olması ve "simge durumuna küçültülmüş" (yalnızca bir tepsi/görev çubuğu simgesi görüntülenecek şekilde) olmasına izin verilmemesi, simge durumuna küçültülmüş durumda olduğu gibi, bir "beyaz ekran" (screendumped) alır. Yani bu, pencerenin sunucu ortamında daha da kötü olanı tam olarak göstermesi gerektiği anlamına gelir. – jan

+0

Bu, SWT'nin söz konusu olduğu en son kelime. Windows API'lerine erişerek veya Mac yerel yöntemlerini çağırarak JNI/JNA'yı kullanarak bunu aşabileceğinizi unutmayın. Çok çekici değil, ama sadece işi bitirebilir. –

+0

Bu, SWT'ye karşı yükseltilmiş bir hata olmalıdır. Buna sadece 5 saat ayırdım ve aynı problemi yaşadım. – Phil