Code Monkey home page Code Monkey logo

ark-retouch's People

Contributors

dependabot[bot] avatar kirillt avatar mdrlzy avatar shubertthei avatar

Watchers

 avatar

ark-retouch's Issues

Crop operation

It must be possible to crop borders of a picture. Default mode of operation should be "free" with any aspect ratio of the selection. Should be also possible to use pre-defined ratios, e.g. 1:1 or 3:4. In latter case, sizes of frame sides can be changed by user only consistently, preserving the ratio.

Time machine

It would be cool to have "time machine" feature: present a user with [timeline] slider and allow user to move along this slider from the very end to the very beginning and back.

Not possible to draw a dot

There seems to be a threshold of minimum amount of dots per line. Probably for avoiding random touches. It results in impossibility to draw dots and symbols involving them (! or ?).

Also, when a user attempts to draw a line, it doesn't appear. But the action is still counted. This can be observed during sequence of undo events. In other words, these dots are invisible and still take a turn to undo them.

dots.mp4

Bounty #3 for Shubert

We need to solve these 4 issues:

Last 2 issues should involve some matrix operations and composing a final transformation matrix before rendering the image. In other words, if a user turns a picture 8 degrees left, then 20 degrees right, only 1 transformation must be applied to the image written to disk: 12 degrees right. The same with scaling.

Please, create separate pull-requests for each issue. Don't solve #14 and #15 at the same time, make only one merged first and then the second.

#13 and #16 can be done in parallel pull-requests without problem.

Incorrect handling of pen "hover" events

Thickness selector sometimes closes unpredictably, when a bluetooth pen is used. It closes when the pen points at the selector, but not touches the screen (bluetooth-enabled pens allow to point like a mouse).

pen.mp4

Resize operation

User must be capable of resizing any image. For now, only the whole image resizing should be supported — resizing of a frame inside the picture should be considered as separate feature. Only down-scaling should be supported for now.

Compression mode control

  • Editing mode: the compression mode should be extracted from it and used for consequent saving.
  • Drawing mode: user should be able to select compression mode for an image (lossless by default).

At this moment, editing huge images makes them even bigger because "lossy" compression mode is changed to "lossless".

Blur tool

The blur tool is special mode which would have people to hide sensitive information on their images.

Background color

The app displays background as white, but after saving the image it's black (if the resulting file is opened by another app). In fact, the background is transparent which results in different filling in different apps.

The color must be explicit in the code, it should be possible to change it using #6 as well. Transparent should be one of options for the color.

Quality slightly drops with each operation

Crop and rotate operations cause quality to slightly drop and this effect accumulates.
Both of these operations must just accumulate some matrix transformation without actual render (except preview).

Rendering must happen only during saving into a file. During this final rendering, all operations must be applied at once if possible. It might be difficult to "sandwich" operations without loss of quality, e.g. crop, rotate, crop. But if possible to represent such a heterogeneous sequence of operations as a single matrix transformation, that would be perfect.

Sequences like crop, crop, crop or rotate, rotate, rotate always can be reduced to a single operation.

Example 1 (original image is 100x100):

crop(10,10,20,20)
crop(5,5,10,10)

is the same as

crop(15,15,20,20)

Example 2:

rotate(90 degrees)
rotate(-10 degrees)
rotate(40 degrees)
rotate(-20 degrees)

is the same as

rotate(100 degrees)

Hide `[reset_changes]` button

  • Button [reset_changes] should be moved into [extras] menu
  • Confirmation dialog must be added to avoid unwanted loss

reset-changes

Smart layout switching

When we pivot images by 90°, we alternate the layout from portrait to landscape, and vice versa. This ensures no data is lost.

This concept could be extended to any rotation angle. The goal is to keep image data loss to a minimum. That is, reducing the area of image portions that fall outside the image boundaries. We can achieve this by switching layouts not just at a straight 90°, but also for any angle within the 45° — 135° and 225° — 315° ranges.

layouts

  • Rotation mode should include checkbox [use_smart_switching]

  • When the rotation angle falls within the ranges specified above:
    * if [use_smart_switching] is checked, the layout changes automatically
    * if [use_smart_switching] is unchecked, a [switch_layout] button appears
    * pressing [switch_layout] changes the layout

Rotate operation

Any image must be possible to rotate:

  1. By fixed angle of 90/180 degrees.
  2. By arbitrary angle, user can rotate the picture using drag motion.

In any case, matrix transformation must be used. Any amount of rotations must be optimized into single rotation using matrix multiplication. This will preserve image quality as much as possible.

File saving animation

Sometimes, saving is too slow. User is not blocked from doing changes while the image is saved. In case of overwriting save, all new changes will be lost. The easiest way to prevent it is to suspend UI and display spinning animation while save is performed.

Limitations of Eraser mode

When Eraser tool is selected in drawing mode users cannot:

  • adjust width of brush
  • undo last actions

It works like this because we disable any button in the toolbar while a tool is engaged. But Eraser tool is closer to a modification of Drawing mode than to dedicated tools like crop, resize, rotate etc. So we should handle it appropriately and enable some of the buttons (undo/redo, brush width).

Text labels

Some mobile editors allow putting text pictures. It can be just text or embedded in some bubble for better look.

For this we need a button which creates a bubble and editable text inside. Would be great to be able to change shape and color of the bubble, or just disable the bubble and leave only plain text.

Handle hover events

During crop operation: hovering with bluetooth pen above crop area borders causes the borders "float". Really weird effect.

Update:
There is also "acceleration effect" — when border of the crop area is moved quickly, it continues moving after the touch was released.

Share result image

User must be able to share the result without saving it. E.g. send into messenger or another app.

Color memory

This feature from Retouch Legacy is very handy.

color-memory.mp4

Color picker should remember last used colors.

Eyedropper

Eyedropper could be helpful to find proper color for a brush. It should be callable using a button somewhere in color selecting dialog. When it's pressed, touching the image must set current color to the color of touched pixel.

eyedropper

Explicit representation of transparency

We should make it clear for a user where background is transparent. E.g. if we create new drawing or load an image with transparency.

  • Transparency can be represented as chess board pattern
  • When user zooms-in or zooms-out, chess pattern should not be scaled
  • When user draws using semi-transparent colors, chess pattern should be visible through them

Chess board pattern example:
transparent

Filter duplicates from recent colors list

So we have this new feature #26 and user is presented by the list of recently used colors.
E.g. user draws something with orange color, then with blue color and then with orange again.

The list would contain this color sequence: orange, blue, orange.
But it would be better to filter duplicates and just have blue and then orange in the list.

So, duplicated should be removed from the final list.

Lines of transparent color are drawed in wrong color

Semi-transparent colors make the line to be "made of circles", these circles overlap resulting in wrong color. But if you draw several lines and undo the last one, the first one becomes of correct color. If you save the image, incorrect version is saved (what would be visible before undoing).

lines.mp4

Rotation triggers only in initial rectangle

See on the picture:

  1. Blue zone — initial bounds of the image, before rotation.
  2. Orange zone — current bounds, after rotation.
  3. Unpainted zone — intersection of initial and current bounds.

bug-rotation.png

So, in rotation dialog, if user made 1 rotation and want to do new rotation without leaving the dialog, it is triggered only by touching the screen in initial bounds of the image (blue + unpainted zone). Touching the screen in orange zone doesn't trigger rotation. This is counter-intuitive for an average user.

In other words, only initial rectangle is draggable, not current one.

Drawing is saved incorrectly

See on the video:

  1. Edit screenshot, draw a rectangle around words "Baron Reznik".
  2. Save the resulting image.
  3. Locate the saved file and open in an image viewer.
  4. See that the rectangle changed its position.
bug-drawing.mp4

More options for creating images from scratch

Would be great to allow user to change parameters of a new image. But we should avoid asking them every time, so we should have changeable defaults. Default resolution should be the screen dimensions and default color should be white.

start_menu

Handle device rotation

Device rotation configuration change must be handled to preserve all edits, more especially crop and rotate edits.
It should preserve the state of cropping when app is in cropping mode.
It should also preserve the state of rotation when app is in rotation mode.

ARK Filepicker enhancements

In continuation of #28:

  • When user doesn't have any ARK folders discovered, the ARK mode must be switched-off
  • Saving must also use ARK mode of the filepicker
    Opening file should also use ARK mode of the filepicker

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.