java findwindow_Java MacUtil.findWindowFromJavaWindow方法代码示例

import com.intellij.ui.mac.foundation.MacUtil; //导入方法依赖的package包/类

@Nullable

private static BufferedImage captureScreen(@Nullable Window belowWindow, @NotNull Rectangle rect) {

ID pool = Foundation.invoke("NSAutoreleasePool", "new");

try {

ID windowId = belowWindow != null ? MacUtil.findWindowFromJavaWindow(belowWindow) : null;

Foundation.NSRect nsRect = new Foundation.NSRect(rect.x, rect.y, rect.width, rect.height);

ID cgWindowId = windowId != null ? Foundation.invoke(windowId, "windowNumber") : ID.NIL;

int windowListOptions = cgWindowId != null

? FoundationLibrary.kCGWindowListOptionOnScreenBelowWindow

: FoundationLibrary.kCGWindowListOptionAll;

int windowImageOptions = FoundationLibrary.kCGWindowImageNominalResolution;

ID cgImageRef = Foundation.cgWindowListCreateImage(nsRect, windowListOptions, cgWindowId, windowImageOptions);

ID bitmapRep = Foundation.invoke(Foundation.invoke("NSBitmapImageRep", "alloc"), "initWithCGImage:", cgImageRef);

ID nsImage = Foundation.invoke(Foundation.invoke("NSImage", "alloc"), "init");

Foundation.invoke(nsImage, "addRepresentation:", bitmapRep);

ID data = Foundation.invoke(nsImage, "TIFFRepresentation");

ID bytes = Foundation.invoke(data, "bytes");

ID length = Foundation.invoke(data, "length");

ByteBuffer byteBuffer = Native.getDirectByteBuffer(bytes.longValue(), length.longValue());

Foundation.invoke(nsImage, "release");

byte[] b = new byte[byteBuffer.remaining()];

byteBuffer.get(b);

return ImageIO.read(new ByteArrayInputStream(b));

}

catch (Throwable t) {

LOG.error(t);

return null;

}

finally {

Foundation.invoke(pool, "release");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值