Android-Image-Cropper icon indicating copy to clipboard operation
Android-Image-Cropper copied to clipboard

[Feat] - One Degree Rotation

Open Canato opened this issue 3 years ago • 9 comments

The library today already rotate images using 90, 180, 270 and 360 angles

The goal is to be able to rotate it by 1 degree difference.

For that will be need to auto zoom crop the image:

  • Let's say the CropOverlay is the same size as the image.
  • When we rotate 5 degrees it will be getting "outside" image area
  • So is need to push the CropOverlay inside and create new limits

Add ui rotation selector, like a carrousel from 0-360

Canato avatar Mar 20 '21 01:03 Canato

Any update on this? Really need this feature.

arpanbag001 avatar Nov 17 '21 20:11 arpanbag001

Hey @arpanbag001 any update will be posted here ^^, sadly I'm not having the most time to dedicate into a new feature, but is open if someone else wanna add =D

Canato avatar Nov 18 '21 09:11 Canato

Still no news on this, I guess?

BlueCobold avatar Sep 05 '22 12:09 BlueCobold

No, if there is someone working on it, a PR a mention or anything this will be updated

Canato avatar Sep 05 '22 12:09 Canato

When I rotating CropImageView with 5 degree my app crashing) java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed at android.graphics.Canvas.checkValidClipOp(Canvas.java:853) at android.graphics.Canvas.clipRect(Canvas.java:876) at com.canhub.cropper.CropOverlayView.drawBackground(CropOverlayView.kt:676) at com.canhub.cropper.CropOverlayView.onDraw(CropOverlayView.kt:618) at android.view.View.draw(View.java:22350) at android.view.View.updateDisplayListIfDirty(View.java:21226) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473) at android.view.View.updateDisplayListIfDirty(View.java:21186) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:559) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:565) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:642) at android.view.ViewRootImpl.draw(ViewRootImpl.java:4101) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3828) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3099) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1952) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8171) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:972) at android.view.Choreographer.doCallbacks(Choreographer.java:796) at android.view.Choreographer.doFrame(Choreographer.java:731) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Sandroisu avatar Sep 08 '22 13:09 Sandroisu

I can create a pull request to fix this

Sandroisu avatar Sep 08 '22 13:09 Sandroisu

Please @Sandroisu open the PR, will be beneficial for everyone

Canato avatar Sep 08 '22 13:09 Canato

@Sandroisu ¡Hi! Just want to know if you could create the pull request, I will really apreciate it Or maybe if you can share your solution, thanks!

MaCls98 avatar Sep 12 '22 06:09 MaCls98

Mantis, the iOS library I'm using for cropping has a nice rotation dial (bottom section): https://github.com/guoyingtao/Mantis/blob/master/Images/Mantis%20on%20all%20devices.png?raw=true

vanniktech avatar Oct 19 '22 10:10 vanniktech