screenshot: added masking
authorGiWoong Kim <giwoong.kim@samsung.com>
Sat, 27 Dec 2014 06:16:58 +0000 (15:16 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Mon, 29 Dec 2014 05:47:53 +0000 (14:47 +0900)
Change-Id: I2f28d25148c589be0b1858226fd2f4eae25685ba
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ScreenShotDialog.java
tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/SdlScreenShotWindow.java
tizen/src/skin/client/src/org/tizen/emulator/skin/screenshot/ShmScreenShotWindow.java
tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java

index 921bee63e562a1be562ad47421de2297e2051646..603017f80e521b9c959b163d79c9eaf48c34fb32 100644 (file)
@@ -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 */
        }
 
index e05fda7d7f4be28ee3c8b93ddb89fbb7ea8381c8..f3cdef791766aaedc740b6f417cab4b3c5d90964 100644 (file)
@@ -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();
index d08bc2e809453b938313bc02c74df1c35b12633b..27fc590765c3bccfc7b6d45c790158433e57e832 100644 (file)
@@ -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();
index 4868210c215e17d586e047d9390aaa13b5a389e0..1440a9337acfc6634216cdc68054d0cad1670bea 100644 (file)
@@ -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;