2013-02-10 6 views
3

전체 스크롤 합성 이미지를 이미지로 내보내려고합니다. 복합체의 가시 영역뿐만 아니라 전체 복합체를 의미합니다. I이 예 발견전체 스크롤 합성 이미지를 이미지로 내보내기

 Image drawable = new Image(display, someComposite.getBounds()); 
     GC gc = new GC(drawable); 
     mainWidget.print(gc); 
     ImageLoader loader = new ImageLoader(); 
     loader.data = new ImageData[] {drawable.getImageData()}; 
     loader.save("exportedImage.bmp", SWT.IMAGE_BMP); 
     drawable.dispose(); 
     gc.dispose(); 

을되지만 출력은 스크롤 복합체의 표시 영역이다. :(그리고 그것의 전체가 아니기 때문에 나는 .getBound() 방법 때문에 그것을 추측하지만 다른 방법으로 전환하는 방법을 찾지 못합니다. .getClientArea()을 시도했지만 작동하지 않았습니다 ...

미리 감사드립니다. . 요시 내가 예를 발견하고 몇 가지 물건을 수정

답변

2

은 - 단지 &이 붙여 복사 : 그것은 :) 을 일하고으로부터 시작하는 좋은 포인트가 될 수

import org.eclipse.swt.*; 
import org.eclipse.swt.custom.ScrolledComposite; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.graphics.Color; 
import org.eclipse.swt.graphics.GC; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.graphics.ImageData; 
import org.eclipse.swt.graphics.ImageLoader; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.*; 


public class ScroledCompositeExport { 
    public static void main (String [] args) { 
     final Display display = new Display(); 
    Shell shell = new Shell(display); 
     shell.setLayout(new FillLayout()); 
     shell.setSize(200, 200); 
     shell.setLocation(20, 20); 

     final ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); 
     sc.setLayout(new GridLayout(1,true)); 

     final Composite innerComposite = new Composite(sc, SWT.NONE); 
     innerComposite.setSize(400, 400); 
     innerComposite.setLayout(new GridLayout(1, true)); 
     innerComposite.setBackground(new Color(display, 255, 0, 0)); 

     for(int i = 0; i < 10; i++) 
     { 
       Button b = new Button(innerComposite, SWT.PUSH); 
       b.setText("Text"); 
       b.addSelectionListener(new SelectionAdapter() { 
        public void widgetSelected(SelectionEvent e) 
        { 
         Image image = new Image(display, innerComposite.getBounds().width, innerComposite.getBounds().height); 
         ImageLoader loader = new ImageLoader(); 

         GC gc = new GC(image); 
         innerComposite.print(gc); 

         gc.dispose(); 

         loader.data = new ImageData[]{image.getImageData()}; 
         loader.save("c:/temp/out.png", SWT.IMAGE_PNG); 
        } 
       }); 
     } 

     sc.setMinSize(innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
     sc.setContent(innerComposite); 
     sc.setExpandHorizontal(true); 
     sc.setExpandVertical(true); 

     shell.open(); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) display.sleep(); 
     } 
     display.dispose(); 
    } 
} 

.