Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-swt-dev] How to print two composites into a picture?

Hello,

After some investigation and experiments today, I had a solution. I'm not sure if this is the perfect solution. 
Just share my solution to you. If you have better one, please share it.

    private static Image getImage(Composite composite) {
        Display display = Display.getCurrent();
        Image image = new Image(display, composite.getBounds());
        gc = new GC(image);
        composite.print(gc);
        gc.dispose();
        return image;
    }

    private static Image combinateImage(Image image1, Image image2) {
        Display display = Display.getCurr ent();
        int newWidth = image1.getBounds().width + image2.getBounds().width;
        int newHeight = image1.getBounds().height > image2.getBounds().height ?
                image1.getBounds().height : image2.getBounds().height;
        Rectangle rect = new Rectangle(0, 0, newWidth, newHeight);
        Image image = new Image(display, rect);
        gc = new GC(image);
        gc.drawImage(image1, 0, 0);
        gc.drawImage(image2, image1.getBounds().width, 0);
        gc.dispose();
        return image;
    }

    //Main function after getting the two composites of editor and property view
    Image image1 = getImage(composite);
    Image image2 = getImage(composite2);
    Image image = combinateImage(image1, image2);
    ImageLoader loader = new ImageLoader();
    loader.data = "" ImageData[] {image.getImageData()};
    loader.save(fileName, format);
     
Best regards,
Hua

At 2013-04-02 09:43:55,Hua <cw_hh@xxxxxxx> wrote:
Hello,
 
I have an editor and its property view. I want to snapshot the two windows into one picture.
I know how to print one composite, for example,
       Display display = Display.getCurrent();
        Image image = new Image(display, composite.getBounds());
        gc = new GC(image);
        composite.print(gc);
        gc.dispose();
        ImageLoader loader = new ImageLoader();
        loader.data = "" ImageData[] {image.getImageData()};
        loader.save(fileName, format);
 
However, I have no idea about how to print two composites into one picture file.
Could anyone help me?
 
Best regards,
Hua





Back to the top