diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java b/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java index 5bc45854..113ae962 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/ImageWrapper.java @@ -79,7 +79,7 @@ public class ImageWrapper { } public Mat getMat() { - if (mMat == null) { + if (mMat == null && mBitmap != null) { mMat = new Mat(); Utils.bitmapToMat(mBitmap, mMat); } @@ -87,6 +87,7 @@ public class ImageWrapper { } public void saveTo(String path) { + ensureNotRecycled(); if (mBitmap != null) { try { mBitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(path)); @@ -99,6 +100,7 @@ public class ImageWrapper { } public int pixel(int x, int y) { + ensureNotRecycled(); if (mBitmap != null) { return mBitmap.getPixel(x, y); } @@ -121,4 +123,9 @@ public class ImageWrapper { } } + + private void ensureNotRecycled() { + if (mBitmap == null && mMat == null) + throw new IllegalStateException("image has been recycled"); + } } diff --git a/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java b/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java index e792acab..f05508ca 100644 --- a/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java +++ b/automator/src/main/java/com/stardust/automator/UiGlobalSelector.java @@ -396,6 +396,11 @@ public class UiGlobalSelector { return this; } + public UiGlobalSelector indexInParent(int index) { + mFilters.add(new IntFilter(IntFilter.INDEX_IN_PARENT, index)); + return this; + } + public UiGlobalSelector filter(final BooleanFilter.BooleanSupplier filter) { mFilters.add(new DfsFilter() { diff --git a/automator/src/main/java/com/stardust/automator/filter/IntFilter.java b/automator/src/main/java/com/stardust/automator/filter/IntFilter.java index d5b356a7..18d59dd7 100644 --- a/automator/src/main/java/com/stardust/automator/filter/IntFilter.java +++ b/automator/src/main/java/com/stardust/automator/filter/IntFilter.java @@ -96,6 +96,18 @@ public class IntFilter extends DfsFilter { } }; + public static final IntProperty INDEX_IN_PARENT = new IntProperty() { + @Override + public int get(UiObject object) { + return object.indexInParent(); + } + + @Override + public String toString() { + return "indexInParent"; + } + }; + private IntProperty mIntProperty; private int mValue;