From: GiWoong Kim Date: Sat, 27 Dec 2014 06:16:58 +0000 (+0900) Subject: screenshot: added masking X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~163 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ed481b563b32a6603131e1e318ea4ed1d263077;p=sdk%2Femulator%2Fqemu.git screenshot: added masking Change-Id: I2f28d25148c589be0b1858226fd2f4eae25685ba Signed-off-by: GiWoong Kim --- diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ScreenShotDialog.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ScreenShotDialog.java index 921bee63e5..603017f80e 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ScreenShotDialog.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ScreenShotDialog.java @@ -353,7 +353,12 @@ public class ScreenShotDialog { } 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 @@ -363,7 +368,7 @@ public class ScreenShotDialog { }); } - protected void capture() throws ScreenShotException { + protected void capture(ImageData maskData) throws ScreenShotException { /* abstract */ } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/SdlScreenShotWindow.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/SdlScreenShotWindow.java index e05fda7d7f..f3cdef7917 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/SdlScreenShotWindow.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/SdlScreenShotWindow.java @@ -58,7 +58,8 @@ public class SdlScreenShotWindow extends ScreenShotDialog { 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( @@ -75,7 +76,11 @@ public class SdlScreenShotWindow extends ScreenShotDialog { 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(); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ShmScreenShotWindow.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ShmScreenShotWindow.java index d08bc2e809..27fc590765 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ShmScreenShotWindow.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ShmScreenShotWindow.java @@ -56,7 +56,8 @@ public class ShmScreenShotWindow extends ScreenShotDialog { 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(); @@ -76,7 +77,11 @@ public class ShmScreenShotWindow extends ScreenShotDialog { 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(); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java index 4868210c21..1440a9337a 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java @@ -44,7 +44,9 @@ import java.util.logging.Logger; 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; @@ -245,6 +247,32 @@ public class SkinUtil { 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;