diff --git a/_includes/sidelist-programming/programming-android.html b/_includes/sidelist-programming/programming-android.html
index fd5952d..cc1f2e9 100644
--- a/_includes/sidelist-programming/programming-android.html
+++ b/_includes/sidelist-programming/programming-android.html
@@ -271,6 +271,7 @@
Enumerations
diff --git a/_includes/sidelist-programming/programming-ios.html b/_includes/sidelist-programming/programming-ios.html
index b4c6fb7..dde1da6 100644
--- a/_includes/sidelist-programming/programming-ios.html
+++ b/_includes/sidelist-programming/programming-ios.html
@@ -275,6 +275,7 @@
Enumerations
diff --git a/programming/android/api-reference/capture-vision-router/auxiliary-classes/intermediate-result-receiver.md b/programming/android/api-reference/capture-vision-router/auxiliary-classes/intermediate-result-receiver.md
index aa08851..8713297 100644
--- a/programming/android/api-reference/capture-vision-router/auxiliary-classes/intermediate-result-receiver.md
+++ b/programming/android/api-reference/capture-vision-router/auxiliary-classes/intermediate-result-receiver.md
@@ -91,6 +91,9 @@ void onTargetROIResultsReceived(@NonNull IntermediateResult result, Intermediate
The callback triggered when the processing of a task is finished.
+> [!Note]
+> This callback may be invoked on different threads. Ensure that any shared resources accessed within the callback are properly synchronized to avoid data corruption or crashes.
+
```java
void onTaskResultsReceived(@NonNull IntermediateResult result, IntermediateResultExtraInfo info);
```
diff --git a/programming/android/api-reference/capture-vision-router/multiple-file-processing.md b/programming/android/api-reference/capture-vision-router/multiple-file-processing.md
index d9bbe25..483b969 100644
--- a/programming/android/api-reference/capture-vision-router/multiple-file-processing.md
+++ b/programming/android/api-reference/capture-vision-router/multiple-file-processing.md
@@ -16,16 +16,20 @@ noTitleIndex: true
| [`getInput`](#getinput) | Returns the image source object. |
| [`addResultReceiver`](#addresultreceiver) | Adds a [`CapturedResultReceiver`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) object as the receiver of captured results. |
| [`removeResultReceiver`](#removeresultreceiver) | Removes the specified [`CapturedResultReceiver`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) object. |
+| [`removeAllResultReceivers`](#removeallresultreceivers) | Removes all user-added [`CapturedResultReceivers`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html). |
| [`startCapturing`](#startcapturing) | Initiates a capturing process based on a specified template. This process is repeated for each image fetched from the source. |
| [`stopCapturing`](#stopcapturing) | Stops the capturing process. |
| [`pauseCapturing`](#pausecapturing) | Pauses the Capture Vision Router. |
| [`resumeCapturing`](#resumecapturing) | Resumes the Capture Vision Router. |
| [`addCaptureStateListener`](#addcapturestatelistener) | Registers a [`CaptureStateListener`](auxiliary-classes/capture-state-listener.html) to be used as a callback when capture state is received. |
| [`removeCaptureStateListener`](#removecapturestatelistener) | Removes a [`CaptureStateListener`](auxiliary-classes/capture-state-listener.html) that has been configured for the Capture Vision Router. |
+| [`removeAllCaptureStateListeners`](#removeallcapturestatelisteners) | Removes all user-added [`CaptureStateListeners`](auxiliary-classes/capture-state-listener.html). |
| [`addResultFilter`](#addresultfilter) | Adds a `CapturedResultFilter` object to filter non-essential results. |
| [`removeResultFilter`](#removeresultfilter) | Removes the specified `CapturedResultFilter` object. |
+| [`removeAllResultFilters`](#removeallresultfilters) | Removes all user-added `CapturedResultFilters`. |
| [`addImageSourceStateListener`](#addimagesourcestatelistener) | Register a [`ImageSourceStateListener`](auxiliary-classes/image-source-state-listener.html) to get callback when the status of [`ImageSourceAdapter`]({{ site.dcv_android_api }}core/basic-structures/image-source-adapter.html) received. |
| [`removeImageSourceStateListener`](#removeimagesourcestatelistener) | Removes a [`ImageSourceStateListener`](auxiliary-classes/image-source-state-listener.html) from the Capture Vision Router. |
+| [`removeAllImageSourceStateListeners`](#removeallimagesourcestatelisteners) | Removes all user-added [`ImageSourceStateListeners`](auxiliary-classes/image-source-state-listener.html). |
## setInput
@@ -87,6 +91,14 @@ void removeResultReceiver(CapturedResultReceiver receiver);
`[in] receiver`: The receiver object, of type [`CapturedResultReceiver`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html).
+## removeAllResultReceivers
+
+Removes all user-added [`CapturedResultReceivers`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html).
+
+```java
+void removeAllResultReceivers();
+```
+
## startCapturing
Initiates a capturing process based on a specified template. This process is repeated for each image fetched from the source.
@@ -153,6 +165,14 @@ void removeResultFilter(CapturedResultFilter filter);
`[in] filter`: The filter object, of type [`CapturedResultFilter`]({{ site.dcv_android_api }}capture-vision-router/auxiliary-classes/captured-result-filter.html).
+## removeResultFilter
+
+Removes all user-added`CapturedResultFilters`.
+
+```java
+void removeAllResultFilters();
+```
+
## addCaptureStateListener
Registers a [`CaptureStateListener`](auxiliary-classes/capture-state-listener.html) to be used as a callback when capture state is received.
@@ -177,6 +197,14 @@ void removeCaptureStateListener(CaptureStateListener listener);
`[in] listener`: An object of [`CaptureStateListener`](auxiliary-classes/capture-state-listener.html)
+## removeAllCaptureStateListeners
+
+Removes all user-added [`CaptureStateListeners`](auxiliary-classes/capture-state-listener.html).
+
+```java
+void removeAllCaptureStateListeners();
+```
+
## addImageSourceStateListener
Register a [`ImageSourceStateListener`](auxiliary-classes/image-source-state-listener.html) to get callback when the status of [`ImageSourceAdapter`]({{ site.dcv_android_api }}core/basic-structures/image-source-adapter.html) received.
@@ -200,3 +228,11 @@ void removeImageSourceStateListener(ImageSourceStateListener listener);
**Parameters**
`[in] listener`: An object of [`ImageSourceStateListener`](auxiliary-classes/image-source-state-listener.html).
+
+## removeAllImageSourceStateListeners
+
+Removes all user-added [`ImageSourceStateListeners`](auxiliary-classes/image-source-state-listener.html).
+
+```java
+void removeAllImageSourceStateListeners();
+```
diff --git a/programming/android/api-reference/core/enum/error-code.md b/programming/android/api-reference/core/enum/error-code.md
index ebf8376..4a44dd1 100644
--- a/programming/android/api-reference/core/enum/error-code.md
+++ b/programming/android/api-reference/core/enum/error-code.md
@@ -137,6 +137,8 @@ public @interface EnumErrorCode
public static final int EC_PDF_LIBRARY_LOAD_FAILED = -10075,
/*The license is initialized successfully but detected invalid content in your key.*/
public static final int EC_LICENSE_WARNING = -10076,
+ /*The template version is incompatible. Please use a compatible template.*/
+ public static final int EC_TEMPLATE_VERSION_INCOMPATIBLE = -10081
/** -20000~-29999: DLS license error code. */
/** No license. */
public static final int EC_NO_LICENSE = -20000,
@@ -154,6 +156,10 @@ public @interface EnumErrorCode
public static final int EC_INSTANCE_COUNT_OVER_LIMIT = -20008,
/** Trial License */
public static final int EC_TRIAL_LICENSE = -20010,
+ /*License authentication failed: quota exceeded.*/
+ public static final int EC_LICENSE_AUTH_QUOTA_EXCEEDED = -20013,
+ /**License restriction: the number of results has exceeded the allowed limit.*/
+ public static final int EC_LICENSE_RESULTS_LIMIT_EXCEEDED = -20014,
/** Failed to reach License Server. */
public static final int EC_FAILED_TO_REACH_DLS = -20200,
/** -30000~-39999: DBR error code. */
diff --git a/programming/android/api-reference/utility/image-processor.md b/programming/android/api-reference/utility/image-processor.md
index b861fb6..218cc2d 100644
--- a/programming/android/api-reference/utility/image-processor.md
+++ b/programming/android/api-reference/utility/image-processor.md
@@ -26,8 +26,9 @@ class ImageProcessor
| Method | Description |
| ------ | ----------- |
-| [`cropImage`](#cropimageimagedatarect) | Crops an image based on the provided rectangle or quadrilateral. |
-| [`cropImage`](#cropimageimagedataquad) | Crops an image based on the provided rectangle or quadrilateral. |
+| [`cropImage`](#cropimageimagedatarect) | Crops an image based on the provided rectangle. |
+| [`cropAndDeskewImage(imageData,quad,dstWidth,dstHeight,padding)`](#cropanddeskewimageimagedataquaddstwidthdstheightpaddingerrorcode) | Crops and deskew an image based on the provided quadrilateral and additional information. |
+| [`cropAndDeskewImage(imageData,quad)`](#cropanddeskewimageimagedataquad) | Crops and deskew an image based on the provided quadrilateral. |
| [`adjustBrightness`](#adjustbrightness) | Adjusts the brightness of an image. |
| [`adjustContrast`](#adjustcontrast) | Adjusts the contrast of an image. |
| [`filterImage`](#filterimage) | Applies a filter to an image. |
@@ -56,23 +57,21 @@ ImageData cropImage(ImageData imageData, Rect rect) throws UtilityException{}
The cropped `ImageData`.
-### cropImage(imageData,quad)
+### cropAndDeskewImage(imageData,quad,dstWidth,dstHeight,padding,errorCode)
-Crops an image based on the provided quadrilateral.
+Crops and deskews an image based on the provided quadrilateral and additional information.
```java
-ImageData cropImage(ImageData imageData, Quadrilateral quad) throws UtilityException{}
+public ImageData cropAndDeskewImage(CImageData imageData, CQuadrilateral quad, int dstWidth, int dstHeight, int padding) throws UtilityException{}
```
-**Parameters**
-
-`[in] imageData`: The `ImageData` to modify.
-
-`[in] quad`: The `Quadrilateral` to crop the image.
+### cropAndDeskewImage(imageData,quad)
-**Return Value**
+Crops and deskews an image based on the provided quadrilateral. The arguments dstWidth, dstHeight, and padding are set to 0.
-The cropped `ImageData`.
+```java
+public ImageData cropAndDeskewImage(CImageData imageData, CQuadrilateral quad) throws UtilityException{}
+```
### adjustBrightness
diff --git a/programming/android/release-notes/android-3.md b/programming/android/release-notes/android-3.md
index d12e831..833c03b 100644
--- a/programming/android/release-notes/android-3.md
+++ b/programming/android/release-notes/android-3.md
@@ -9,6 +9,20 @@ noTitleIndex: true
# Release Notes - DynamsoftCaptureVision Android v3.x
+## 3.0.5000 (07/29/2025)
+
+### New
+
+- **Supported 16 KB page sizes**.
+
+### Changed
+
+- **License Validation Behavior**: Instead of stopping execution immediately on an invalid license module, the library now continues processing and returns results from modules with valid licenses. An error is still reported to indicate the license issue.
+
+### Fixed
+
+- Fixed various minor bugs and improved overall stability.
+
## 3.0.3100 (05/30/2025)
### Fixed
diff --git a/programming/android/release-notes/index.md b/programming/android/release-notes/index.md
index 4b6f9af..75a1212 100644
--- a/programming/android/release-notes/index.md
+++ b/programming/android/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Release Notes Index - DynamsoftCaptureVisionBundle Android
+- [3.0.5000 (07/29/2025)](android-3.html#305000-07292025)
- [3.0.3100 (05/30/2025)](android-3.html#303100-05302025)
- [3.0.3000 (05/15/2025)](android-3.html#303000-05152025)
- [2.6.1003 (01/23/2025)](android-2.html#261003-01232025)
diff --git a/programming/android/user-guide/mrz.md b/programming/android/user-guide/mrz.md
index 82f7a5e..1ab23b5 100644
--- a/programming/android/user-guide/mrz.md
+++ b/programming/android/user-guide/mrz.md
@@ -118,13 +118,13 @@ The MRZ (Machine Readable Zone) in TD3 format consists of 2 lines, with each lin
>1.
```groovy
dependencies {
- implementation 'com.dynamsoft:mrzscannerbundle:3.0.3100'
+ implementation 'com.dynamsoft:mrzscannerbundle:3.0.5000'
}
```
2.
```kotlin
dependencies {
- implementation("com.dynamsoft:mrzscannerbundle:3.0.3100")
+ implementation("com.dynamsoft:mrzscannerbundle:3.0.5000")
}
```
diff --git a/programming/ios/api-reference/capture-vision-router/multiple-file-processing.md b/programming/ios/api-reference/capture-vision-router/multiple-file-processing.md
index 6f65f70..9cfffc9 100644
--- a/programming/ios/api-reference/capture-vision-router/multiple-file-processing.md
+++ b/programming/ios/api-reference/capture-vision-router/multiple-file-processing.md
@@ -12,20 +12,25 @@ noTitleIndex: true
| Method | Description |
| ------ | ----------- |
-| [`setInput`](#setinput) | Sets an image source that will provide images to be consecutively processed. |
-| [`getInput`](#getinput) | Gets the attached image source adapter object of the Capture Vision Router. |
-| [`addImageSourceStateListener`](#addimagesourcestatelistener) | Registers a `DSImageSourceStateListener` object to be used as a callback when the status of `DSImageSourceAdapter` changes. |
-| [`removeImageSourceStateListener`](#removeimagesourcestatelistener) | Removes a `DSImageSourceStateListener` from the Capture Vision Router. |
+| [`setInput`](#setinput) | Sets up an image source to provide images for continuous processing. |
+| [`getInput`](#getinput) | Returns the image source object. |
| [`addResultReceiver`](#addresultreceiver) | Adds a [`CapturedResultReceiver`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) object as the receiver of captured results. |
| [`removeResultReceiver`](#removeresultreceiver) | Removes the specified [`CapturedResultReceiver`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) object. |
+| [`removeAllResultReceivers`](#removeallresultreceivers) | Removes all user-added [`CapturedResultReceivers`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html). |
| [`startCapturing`](#startcapturing) | Initiates a capturing process based on a specified template. This process is repeated for each image fetched from the source. |
| [`stopCapturing`](#stopcapturing) | Stops the capturing process. |
-| [`pauseCapturing`](#pausecapturing) | Pauses the capturing process. |
-| [`resumeCapturing`](#resumecapturing) | Resumes the capturing process. |
-| [`addCaptureStateListener`](#addcapturestatelistener) | Registers a `DSCaptureStateListener` to be used as a callback when capture state changes. |
-| [`removeCaptureStateListener`](#removecapturestatelistener) | Removes a `DSCaptureStateListener` that has been configured for the Capture Vision Router. |
-| [`addResultFilter`](#addresultfilter) | Adds a `DSCapturedResultFilter` object to filter non-essential results. |
-| [`removeResultFilter`](#removeresultfilter) | Removes the specified `DSCapturedResultFilter` object. |
+| [`pauseCapturing`](#pausecapturing) | Pauses the Capture Vision Router. |
+| [`resumeCapturing`](#resumecapturing) | Resumes the Capture Vision Router. |
+| [`addCaptureStateListener`](#addcapturestatelistener) | Registers a [`CaptureStateListener`](auxiliary-classes/capture-state-listener.html) to be used as a callback when capture state is received. |
+| [`removeCaptureStateListener`](#removecapturestatelistener) | Removes a [`CaptureStateListener`](auxiliary-classes/capture-state-listener.html) that has been configured for the Capture Vision Router. |
+| [`removeAllCaptureStateListeners`](#removeallcapturestatelisteners) | Removes all user-added [`CaptureStateListeners`](auxiliary-classes/capture-state-listener.html). |
+| [`addResultFilter`](#addresultfilter) | Adds a `CapturedResultFilter` object to filter non-essential results. |
+| [`removeResultFilter`](#removeresultfilter) | Removes the specified `CapturedResultFilter` object. |
+| [`removeAllResultFilters`](#removeallresultfilters) | Removes all user-added `CapturedResultFilters`. |
+| [`addImageSourceStateListener`](#addimagesourcestatelistener) | Register a [`ImageSourceStateListener`](auxiliary-classes/image-source-state-listener.html) to get callback when the status of [`ImageSourceAdapter`]({{ site.dcv_android_api }}core/basic-structures/image-source-adapter.html) received. |
+| [`removeImageSourceStateListener`](#removeimagesourcestatelistener) | Removes a [`ImageSourceStateListener`](auxiliary-classes/image-source-state-listener.html) from the Capture Vision Router. |
+| [`removeAllImageSourceStateListeners`](#removeallimagesourcestatelisteners) | Removes all user-added [`ImageSourceStateListeners`](auxiliary-classes/image-source-state-listener.html). |
+
## setInput
@@ -131,6 +136,23 @@ func removeImageSourceStateListener(_ listener:DSImageSourceStateListener) -> BO
A BOOL value that indicates whether the `DSImageSourceStateListener` is removed successfully.
+## removeAllImageSourceStateListeners
+
+Removes all user-added `DSImageSourceStateListeners`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (BOOL)removeAllImageSourceStateListeners;
+```
+2.
+```swift
+func removeAllImageSourceStateListeners()
+```
+
## addResultReceiver
Adds a [`CapturedResultReceiver`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) object as the receiver of captured results.
@@ -181,6 +203,23 @@ func removeResultReceiver(_ listener:DSCapturedResultReceiver) -> BOOL
A BOOL value that indicates whether the result receiver is removed successfully.
+## removeAllResultReceivers
+
+Removes all user-added [`CapturedResultReceivers`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html).
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (void)removeAllResultReceivers;
+```
+2.
+```swift
+func removeAllResultReceivers()
+```
+
## startCapturing
Initiates a capturing process based on a specified template. This process is repeated for each image fetched from the source.
@@ -196,7 +235,7 @@ Initiates a capturing process based on a specified template. This process is rep
```
2.
```swift
-func startCapturing(_ templateName:String) -> BOOL
+func startCapturing(_ templateName:String, completionHandler: ((Bool, (any Error)?) -> Void)? = nil)
```
**Parameters**
@@ -325,6 +364,23 @@ func removeCaptureStateListener(_ listener:DSCaptureStateListener) -> BOOL
A BOOL value that indicates whether the capture state listener is removed successfully.
+## removeAllCaptureStateListeners
+
+Removes all user-added `DSCaptureStateListeners`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (BOOL)removeAllCaptureStateListeners;
+```
+2.
+```swift
+func removeAllCaptureStateListeners()
+```
+
## addResultFilter
Adds a [`DSCapturedResultFilter`]({{ site.dcv_ios_api }}capture-vision-router/auxiliary-classes/captured-result-filter.html) object to filter non-essential results. Currnetly, is must be a [`MultiFrameCrossFilter`]({{ site.dcv_ios_api }}utility/multi-frame-result-cross-filter.html) object.
@@ -374,3 +430,20 @@ func removeResultFilter(_ filter:DSCapturedResultFilter) -> BOOL
**Return Value**
A BOOL value that indicates whether the result filter is removed successfully.
+
+## removeAllResultFilters
+
+Removes all user-added `DSCapturedResultFilters`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (BOOL)removeAllResultFilters;
+```
+2.
+```swift
+func removeAllResultFilters()
+```
diff --git a/programming/ios/api-reference/core/enum/error-code.md b/programming/ios/api-reference/core/enum/error-code.md
index 979170b..25aa009 100644
--- a/programming/ios/api-reference/core/enum/error-code.md
+++ b/programming/ios/api-reference/core/enum/error-code.md
@@ -131,6 +131,8 @@ typedef NS_ERROR_ENUM(DSErrorDomain, DSError) {
DSErrorPDFLicenseNotFound = -10079,
/**The rectangle is invalid.*/
DSErrorRectInvalid = -10080,
+ /*The template version is incompatible. Please use a compatible template.*/
+ DSErrorTemplateVersionIncompatible = -10081,
/**No license.*/
DSErrorNoLicense = -20000,
/**Failed to read or write license cache. */
@@ -145,6 +147,10 @@ typedef NS_ERROR_ENUM(DSErrorDomain, DSError) {
DSErrorInstanceCountOverLimit = -20008,
/**Trial License*/
DSErrorTrialLicense = -20010,
+ /*License authentication failed: quota exceeded.*/
+ DSErrorLicenseAuthQuotaExceeded = -20013,
+ /**License restriction: the number of results has exceeded the allowed limit.*/
+ DSErrorLicenseResultsLimitExceeded = -20014,
/**The license is not valid for current version*/
DSErrorLicenseVersionNotMatch = -20011,
/** -30000~-39999: DBR error code. */
@@ -191,7 +197,7 @@ typedef NS_ERROR_ENUM(DSErrorDomain, DSError) {
/**No content has been detected. */
DSErrorContentNotFound = -50056,
/*The quardrilateral is invalid. */
- DSErrorQuardrilateralInvalid = -50057,
+ DSErrorQuadrilateralInvalid = -50057,
/*[Document Normalizer] No license found.*/
DSErrorDDNLicenseNotFound = -50058,
/** -60000~-69999: DCE error code. */
diff --git a/programming/ios/api-reference/utility/image-processor.md b/programming/ios/api-reference/utility/image-processor.md
index e8fa9e2..31a9cd0 100644
--- a/programming/ios/api-reference/utility/image-processor.md
+++ b/programming/ios/api-reference/utility/image-processor.md
@@ -34,7 +34,8 @@ class ImageProcessor : NSObject
| Method | Description |
| ------ | ----------- |
| [`cropImage(imageData,rect)`](#cropimageimagedatarect) | Crops an image based on the provided rectangle or quadrilateral. |
-| [`cropImage(imageData,quad)`](#cropimageimagedataquad) | Crops an image based on the provided rectangle or quadrilateral. |
+| [`cropAndDeskewImage(imageData,quad,dstWidth,dstHeight,padding)`](#cropanddeskewimageimagedataquaddstwidthdstheightpaddingerrorcode) | Crops and deskew an image based on the provided quadrilateral and additional information. |
+| [`cropAndDeskewImage(imageData,quad)`](#cropanddeskewimageimagedataquad) | Crops and deskew an image based on the provided quadrilateral. |
| [`adjust(imageData,brightness)`](#adjustbrightness) | Adjusts the brightness of an image. |
| [`adjust(imageData,contrast)`](#adjustcontrast) | Adjusts the contrast of an image. |
| [`filterImage`](#filterimage) | Applies a filter to an image. |
@@ -76,9 +77,9 @@ func cropImage(imageData: ImageData, rect: Rect, error: UnsafeMutablePointer
>- Objective-C
@@ -86,13 +87,16 @@ Crops an image based on the provided quadrilateral.
>
>1.
```objc
-- (DSImageData *)cropImage:(DSImageData *)imageData
- quad:(DSQuadrilateral *)quad
- error:(NSError * _Nullable * _Nullable)error;
+- (nullable ImageData*)cropAndDeskewImage:(DSImageData*)imageData
+ quad:(DSQuadrilateral*)quad
+ dstWidth:(NSInteger)dstWidth
+ dstHeight:(NSInteger)dstHeight
+ padding:(NSInteger)padding
+ error:(NSError * _Nullable * _Nullable)error;
```
2.
```swift
-func cropImage(imageData: ImageData, quad: Quadrilateral, error: UnsafeMutablePointer?) -> ImageData
+func cropAndDeskewImage(imageData: ImageData, quad: Quadrilateral, dstWidth: Int, dstHeight: Int, padding: Int) throws -> ImageData
```
**Parameters**
@@ -101,11 +105,40 @@ func cropImage(imageData: ImageData, quad: Quadrilateral, error: UnsafeMutablePo
`quad`: The `Quadrilateral` to crop the image.
+`dstWidth`: The width of the destination image.
+
+`dstHeight`: The height of the destination image.
+
+`padding`: The padding value.
+
`error`: An `NSError` pointer. If an error occurs, it will represent the error information.
-**Return Value**
+### cropAndDeskewImage(imageData,quad)
-The cropped `ImageData`.
+Crops and deskews an image based on the provided quadrilateral. The arguments dstWidth, dstHeight, and padding are set to 0.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (nullable ImageData*)cropAndDeskewImage:(DSImageData*)imageData
+ quad:(DSQuadrilateral*)quad;
+ error:(NSError * _Nullable * _Nullable)error
+```
+2.
+```swift
+func cropAndDeskewImage(imageData: ImageData, quad: Quadrilateral) throws -> ImageData
+```
+
+**Parameters**
+
+`imageData`: The `ImageData` to modify.
+
+`quad`: The `Quadrilateral` to crop the image.
+
+`error`: An `NSError` pointer. If an error occurs, it will represent the error information.
### adjust(imageData,brightness)
diff --git a/programming/ios/release-notes/index.md b/programming/ios/release-notes/index.md
index 85bec61..a38def1 100644
--- a/programming/ios/release-notes/index.md
+++ b/programming/ios/release-notes/index.md
@@ -9,6 +9,7 @@ noTitleIndex: true
# Release Notes Index - DynamsoftCaptureVisionBundle iOS
+- [3.0.5000 (07/29/2025)](ios-2.html#305000-07292025)
- [3.0.3000 (05/15/2025)](ios-2.html#303000-05152025)
- [2.6.1004 (03/07/2025)](ios-2.html#261004-03072025)
- [2.6.1003 (01/23/2025)](ios-2.html#261003-01232025)
diff --git a/programming/ios/release-notes/ios-3.md b/programming/ios/release-notes/ios-3.md
index 13f3ce2..66d7bf8 100644
--- a/programming/ios/release-notes/ios-3.md
+++ b/programming/ios/release-notes/ios-3.md
@@ -9,6 +9,17 @@ noTitleIndex: true
# Release Notes - DynamsoftCaptureVision iOS v3.x
+## 3.0.5000 (07/29/2025)
+
+### Changed
+
+- **License Validation Behavior**: Instead of stopping execution immediately on an invalid license module, the library now continues processing and returns results from modules with valid licenses. An error is still reported to indicate the license issue.
+- **Default Camera Changed**: To address short-distance focusing issues on Pro Max iPhones, the default camera has been switched to `BackDualWideAuto`, enabling automatic switching between the wide and ultra-wide cameras.
+
+### Fixed
+
+- Fixed various minor bugs and improved overall stability.
+
## 3.0.3000 (05/15/2025)
### [Highlights](https://www.dynamsoft.com/release-highlights/?product=dcv3.0)
diff --git a/programming/ios/user-guide/mrz.md b/programming/ios/user-guide/mrz.md
index daa68ba..82249be 100644
--- a/programming/ios/user-guide/mrz.md
+++ b/programming/ios/user-guide/mrz.md
@@ -85,7 +85,7 @@ There are two ways to add the SDK into your project - **CocoaPods**, or via **Sw
target '{Your project name}' do
use_frameworks!
- pod 'DynamsoftMRZScannerBundle','3.0.0'
+ pod 'DynamsoftMRZScannerBundle','3.0.5000'
end
```
@@ -102,7 +102,7 @@ There are two ways to add the SDK into your project - **CocoaPods**, or via **Sw
2. In the top-right section of the window, search "https://github.com/Dynamsoft/mrz-scanner-spm"
-3. Select `mrz-scanner-spm`, choose `Exact version`, enter **3.0.0**, then click **Add Package**.
+3. Select `mrz-scanner-spm`, choose `Exact version`, enter **3.0.5000**, then click **Add Package**.
4. Check all the **xcframeworks** and add them.