}
private void clickShutter() throws ScreenShotException {
- capture();
+ Image maskImage = skin.getDisplayCanvas().getMaskImage();
+ if (maskImage != null) {
+ capture(SkinUtil.getMaskDataForImage(shell.getDisplay(), maskImage));
+ } else {
+ capture(null);
+ }
shell.getDisplay().asyncExec(new Runnable() {
@Override
});
}
- protected void capture() throws ScreenShotException {
+ protected void capture(ImageData maskData) throws ScreenShotException {
/* abstract */
}
this.palette = palette;
}
- protected void capture() throws ScreenShotException {
+ @Override
+ protected void capture(ImageData maskData) throws ScreenShotException {
logger.info("screenshot capture");
DataTranfer dataTranfer = skin.communicator.sendDataToQEMU(
imageData = getRotateImageData(imageData);
Image tempImage = imageShot;
- imageShot = new Image(Display.getDefault(), imageData);
+ if (maskData != null) {
+ imageShot = new Image(Display.getDefault(), imageData, maskData);
+ } else {
+ imageShot = new Image(Display.getDefault(), imageData);
+ }
if (tempImage != null) {
tempImage.dispose();
this.palette = palette;
}
- protected void capture() throws ScreenShotException {
+ @Override
+ protected void capture(ImageData maskData) throws ScreenShotException {
logger.info("screenshot capture");
int width = skin.getEmulatorSkinState().getCurrentResolutionWidth();
imageData = getRotateImageData(imageData);
Image tempImage = imageShot;
- imageShot = new Image(Display.getDefault(), imageData);
+ if (maskData != null) {
+ imageShot = new Image(Display.getDefault(), imageData, maskData);
+ } else {
+ imageShot = new Image(Display.getDefault(), imageData);
+ }
if (tempImage != null) {
tempImage.dispose();
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.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Control;
return false;
}
+ public static ImageData getMaskDataForImage(Display display, Image srcImage) {
+ if (srcImage == null || srcImage.isDisposed() == true) {
+ return null;
+ }
+
+ ImageData srcImageData = srcImage.getImageData();
+ int[] maskArray = new int[srcImageData.width * srcImageData.height];
+
+ int j = 0;
+ for (int i = 0; i < srcImageData.width; i++) {
+ for (j = 0; j < srcImageData.height; j++) {
+ if (srcImageData.getAlpha(i, j) != 0) {
+ maskArray[i * srcImageData.width + j] = 1;
+ } else {
+ maskArray[i * srcImageData.width + j] = 0;
+ }
+ }
+ }
+
+ ImageData maskData = new ImageData(srcImageData.width, srcImageData.height, 1,
+ new PaletteData(new RGB[] { new RGB(0, 0, 0) , new RGB(255, 255, 255) }));
+ maskData.setPixels(0, 0, srcImageData.width * srcImageData.height, maskArray, 0);
+
+ return maskData;
+ }
+
public static Region getTrimmedRegion(Image image) {
if (null == image) {
return null;