Java 将完整的滚动组合导出到图像

Java 将完整的滚动组合导出到图像,java,image,swt,scrolledcomposite,Java,Image,Swt,Scrolledcomposite,我想导出一个完整的滚动复合图像。我指的是整个合成物,而不仅仅是合成物的可见区域。 我发现这个例子: Image drawable = new Image(display, someComposite.getBounds()); GC gc = new GC(drawable); mainWidget.print(gc); ImageLoader loader = new ImageLoader(); loader.d

我想导出一个完整的滚动复合图像。我指的是整个合成物,而不仅仅是合成物的可见区域。 我发现这个例子:

        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()
方法,但我找不到方法将其切换到另一个方法。我尝试了
.getclientrea()
,但没有成功

提前感谢,,
Yossi.

我找到了一个示例并修改了一些内容-只需复制并粘贴即可:

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 ();
    }
}
import org.eclipse.swt.*;
导入org.eclipse.swt.custom.ScrolledComposite;
导入org.eclipse.swt.events.SelectionAdapter;
导入org.eclipse.swt.events.SelectionEvent;
导入org.eclipse.swt.graphics.Color;
导入org.eclipse.swt.graphics.GC;
导入org.eclipse.swt.graphics.Image;
导入org.eclipse.swt.graphics.ImageData;
导入org.eclipse.swt.graphics.ImageLoader;
导入org.eclipse.swt.graphics.Rectangle;
导入org.eclipse.swt.layout.FillLayout;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.*;
公共类ScroledCompositeExport{
公共静态void main(字符串[]args){
最终显示=新显示();
外壳=新外壳(显示);
setLayout(新的FillLayout());
外壳。设置尺寸(200200);
外壳设置位置(20,20);
最终ScrolledComposite sc=新的ScrolledComposite(shell,SWT.BORDER | SWT.V|u SCROLL | SWT.H|u SCROLL);
sc.setLayout(新网格布局(1,真));
最终复合材料内部复合材料=新复合材料(sc,SWT.NONE);
innerComposite.setSize(400400);
setLayout(新的GridLayout(1,true));
setBackground(新颜色(display,255,0,0));
对于(int i=0;i<10;i++)
{
按钮b=新按钮(内部组合,SWT.PUSH);
b、 setText(“文本”);
b、 addSelectionListener(新建SelectionAdapter(){
公共无效WidgeSelected(SelectionEvent e)
{
Image Image=新图像(显示,innerComposite.getBounds().width,innerComposite.getBounds().height);
ImageLoader=新的ImageLoader();
GC=新的GC(图像);
innerComposite.print(gc);
gc.dispose();
loader.data=newImageData[]{image.getImageData()};
保存(“c:/temp/out.png”,SWT.IMAGE\u png);
}
});
}
sc.setMinSize(innerComposite.computeSize(SWT.DEFAULT,SWT.DEFAULT));
sc.setContent(innerComposite);
sc.setExpandHorizontal(真);
sc.setExpandVertical(真);
shell.open();
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())display.sleep();
}
display.dispose();
}
}
它正在工作:) 这是一个很好的起点