[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.swt] How to copy image from TabFolder
|
- From: cbvarun@xxxxxxxxx (Varun Balakrishnan)
- Date: Sun, 19 Oct 2008 03:09:55 +0000 (UTC)
- Newsgroups: eclipse.platform.swt
- Organization: Eclipse
- User-agent: NewsPortal/0.36 (http://florian-amrhein.de/newsportal)
Hi,
I have a TabFolder with few TabItems, I want to save image of each tab
item.
Please see my code below. It is not working as desired. Could someone
please tell me what is going wrong ? I am getting the image of first tab
item correctly.
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DirectColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
public class Snippet76 {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
final TabFolder tabFolder = new TabFolder(shell, SWT.BORDER);
List<Composite> controls = new ArrayList<Composite>();
for (int i = 0; i < 2; i++) {
TabItem item = new TabItem(tabFolder, SWT.NONE);
if (i == 0)
item.setText("One " + i);
else
item.setText("Two " + i);
Composite composite = new Composite(tabFolder, SWT.NORMAL);
composite.setLayout(new GridLayout());
Button button = new Button(composite, SWT.PUSH);
button.setText("Page " + i);
controls.add(composite);
item.setControl(composite);
composite.pack();
}
tabFolder.pack();
shell.pack();
shell.open();
saveGallery("C:\\Users\\zeetech\\Desktop\\tst.png", controls);
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void saveGallery(String fileName,
java.util.List<Composite> pages) {
int count = 0;
String extension = getFileExtension(fileName);
String file = fileName.substring(0, fileName.lastIndexOf("."));
for (Composite page : pages) {
Point tableSize = page.getSize();
GC gc = new GC(page);
final Image image = new Image(page.getDisplay(), tableSize.x,
tableSize.y);
gc.copyArea(image, 0, 0);
BufferedImage bufferedImage = convertToAWT(image.getImageData());
try {
ImageIO.write(bufferedImage, extension, new File(file + count++
+ "." + extension));
} catch (IOException e) {
e.printStackTrace();
}
gc.dispose();
}
}
public static String getFileExtension(String fileName) {
int index = fileName.lastIndexOf('.');
if (index == -1)
return null;
if (index == (fileName.length() - 1))
return "";
return fileName.substring(index + 1);
}
static BufferedImage convertToAWT(ImageData data) {
ColorModel colorModel = null;
PaletteData palette = data.palette;
if (palette.isDirect) {
colorModel = new DirectColorModel(data.depth, palette.redMask,
palette.greenMask, palette.blueMask);
BufferedImage bufferedImage = new BufferedImage(colorModel,
colorModel.createCompatibleWritableRaster(data.width,
data.height), false, null);
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[3];
for (int y = 0; y < data.height; y++) {
for (int x = 0; x < data.width; x++) {
int pixel = data.getPixel(x, y);
RGB rgb = palette.getRGB(pixel);
pixelArray[0] = rgb.red;
pixelArray[1] = rgb.green;
pixelArray[2] = rgb.blue;
raster.setPixels(x, y, 1, 1, pixelArray);
}
}
return bufferedImage;
} else {
RGB[] rgbs = palette.getRGBs();
byte[] red = new byte[rgbs.length];
byte[] green = new byte[rgbs.length];
byte[] blue = new byte[rgbs.length];
for (int i = 0; i < rgbs.length; i++) {
RGB rgb = rgbs[i];
red[i] = (byte) rgb.red;
green[i] = (byte) rgb.green;
blue[i] = (byte) rgb.blue;
}
if (data.transparentPixel != -1) {
colorModel = new IndexColorModel(data.depth, rgbs.length, red,
green, blue, data.transparentPixel);
} else {
colorModel = new IndexColorModel(data.depth, rgbs.length, red,
green, blue);
}
BufferedImage bufferedImage = new BufferedImage(colorModel,
colorModel.createCompatibleWritableRaster(data.width,
data.height), false, null);
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[1];
for (int y = 0; y < data.height; y++) {
for (int x = 0; x < data.width; x++) {
int pixel = data.getPixel(x, y);
pixelArray[0] = pixel;
raster.setPixel(x, y, pixelArray);
}
}
return bufferedImage;
}
}
}