2009-12-03 31 views
6

tôi sẽ rất cảm kích nếu bạn được tư vấn và giúp đỡ:SWT: Làm thế nào để “làm” một Widget trong nền/thành offscreenbuffer

Làm thế nào tôi có thể làm cho một SWT Widget/Component trong BỐI CẢNH (? Offscreenbuffer) và có được “sơn” pixel được vẽ bởi các widget/Component để lưu chúng trên ổ cứng:

những gì tôi đang có là:

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); 
//... 

vấn đề: Chụp ảnh chụp màn hình bản thân của vỏ/widget hoạt động, nhưng nó sẽ mở một Windo mới w trong Thanh tác vụ. Đó là điều tôi KHÔNG muốn.

Điều tôi muốn đạt được là: Tôi muốn chạy ứng dụng này hoàn toàn dưới nền dưới dạng "ứng dụng máy chủ" (ví dụ: nhúng và gọi điều này vào một servlet). Vì vậy, MyWidgetComponent nên được render pixel bằng pixel hoàn toàn trong offscreenbuffer và sau này tôi lấy các pixel và lưu chúng vào đĩa cứng hoặc trả về trực tiếp widget được hiển thị như là một hình ảnh như là kết quả của yêu cầu servlet. (Tôi không muốn bật bất kỳ cửa sổ nào trong môi trường máy chủ, trong trường hợp này có thể là một máy chủ cửa sổ ...).

Làm cách nào tôi có thể đạt được điều này. Tôi đã tìm kiếm rất nhiều nhưng havent tìm thấy bất cứ điều gì hữu ích.

Cảm ơn bạn rất nhiều !! Jan

Trả lời

2

tôi không thể trả lời câu hỏi của bạn trực tiếp, nhưng tôi đã chạy vào một vấn đề tương tự mà tôi phải vật lộn với: tham gia một ảnh chụp màn hình của một Shell hoặc Widget trong khi nó đang bị che khuất khỏi tầm nhìn.

Hãy xem xét, ví dụ: cửa sổ A cửa sổ chồng chéo B. Một ảnh chụp màn hình được làm bằng B sử dụng mã của bạn:

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

phát hiện của tôi tiết lộ rằng điều này có thể được thực hiện trong môi trường Windows Vista, Windows 7 và Mac OS X (mặc dù tôi không chắc chắn về sau này). Tuy nhiên, dưới Windows XP, Linux với GNOME và Linux với KDE, ảnh chụp màn hình chứa một vùng trắng nơi cửa sổ chồng chéo cản trở khung nhìn.

Tôi chưa tìm thấy giải pháp cho điều này và tôi nghi ngờ rằng nền tảng hành vi này không chỉ phụ thuộc vào nền tảng hành vi này, mà còn khá là lỗi trong SWT.

Tôi rất muốn nghe rằng tôi đã bị đánh dấu!

+0

Xin chào Paul, cảm ơn bạn rất nhiều vì câu trả lời của bạn !! Câu trả lời của bạn rất thú vị để đọc. Tôi đã thực hiện một trải nghiệm tương tự (có thể là hiển nhiên đối với các chuyên gia, nhưng không phải tôi) khiến cho việc "dựng hình" trở nên rắc rối hơn: Như đã mô tả ở trên, một cửa sổ sẽ luôn bật lên, nhưng không chỉ cửa sổ này bật lên là "VISIBLE/MAXIMIZED" và không được phép "thu nhỏ" (để chỉ có biểu tượng khay/thanh tác vụ hiển thị), như ở trạng thái thu nhỏ, tôi cũng nhận được một "màn hình trắng" được hiển thị. Vì vậy, điều này có nghĩa là cửa sổ phải được hiển thị đầy đủ những gì thậm chí còn tồi tệ hơn trong một môi trường serverside. – jan

+0

Có vẻ như đó là từ cuối cùng, theo như SWT có liên quan. Lưu ý rằng bạn có thể giải quyết vấn đề này bằng cách sử dụng JNI/JNA bằng cách truy cập các API Windows hoặc gọi các phương thức gốc của Mac. Không phải là rất quyến rũ, nhưng nó chỉ có thể nhận được công việc làm. –

+0

Điều này sẽ là một lỗi được đưa ra chống lại SWT. Tôi chỉ dành 5 giờ để dành thời gian cho vấn đề này, và có cùng một vấn đề. – Phil

Các vấn đề liên quan