跳过窗口被捕获

我创build了一个有两个窗口的AIR应用程序。 第一个是主窗口(spark windowed application),第二个是组件(spark window)。 我正在使用Java来捕获Flex-Java Bridge Flerry的桌面屏幕。

这里是捕捉屏幕的代码是:

HDC hdcWindow = User32.INSTANCE.GetDC(hWnd); HDC hdcMemDC = GDI32.INSTANCE.CreateCompatibleDC(hdcWindow); RECT bounds = new RECT(); User32Extra.INSTANCE.GetClientRect(hWnd, bounds); int width = bounds.right; int height = bounds.bottom ; HBITMAP hBitmap = GDI32.INSTANCE.CreateCompatibleBitmap(hdcWindow, width, height); HANDLE hOld = GDI32.INSTANCE.SelectObject(hdcMemDC, hBitmap); GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, hdcWindow, 0, 0, WinGDIExtra.SRCCOPY); 

我不希望主要的弹性窗口被捕获。 它应该跳过(透明)被捕获。

这是可能的通过更改Flex项目的configuration?

如果不能在flex和java中完成,可以在什么平台上完成?

如果我正确理解你的问题。

你可以使用内置的Flex / as3函数截取整个应用程序或特定的组件,然后转换成bytearray和PngEncoder(或者JPGEncoder,如果你喜欢的话),比保存它…

这是一个例子:

 <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Script> <![CDATA[ import mx.graphics.codec.PNGEncoder; private function takeSnapshot(comp:DisplayObject):void { var bitmapData:BitmapData = new BitmapData(comp.width,comp.height,false,0x00000000); bitmapData.draw(comp, new Matrix()); var fileStream:FileStream = new FileStream(); fileStream.open(File.desktopDirectory.resolvePath("screenshot.png"), FileMode.UPDATE); fileStream.writeBytes(new PNGEncoder().encode(bitmapData)); } ]]> </fx:Script> <s:BorderContainer width="100%" height="100%" backgroundColor="#ff00ff"> <s:Label text="this text and box should be saved"/> <s:BorderContainer width="25%" height="25%" backgroundColor="#ffff00" horizontalCenter="0" id="extended" verticalCenter="0"> <s:Label text="this text and box should be saved" width="100%" maxDisplayedLines="5"/> </s:BorderContainer> </s:BorderContainer> <s:Button bottom="0" left="0" label="screen" click="takeSnapshot(extended)"/> </s:WindowedApplication> 

编辑:

正如我以为我误解了要求..

我能想到的唯一方法是:

  1. 最小化应用程序( this.minimize(); )或将alpha设置为0( this.alpha=0 )。
  2. 以截图
  3. 最大化应用程序( this.maximize(); )或将alpha设置为1( this.alpha=0 )。

我能想到的一个解决scheme就是你可以把“不需要的”窗口移出来,就好像。 (低于0,0坐标)与这样的一些代码。

 public void foo(){ this.xCoord = -this.xCoord; this.yCoord = -this.yCoord; } //Im not sure about the exact syntax but you should get the idea. 

然后

 foo(); capture(); foo(); 
Interesting Posts