mriale / PyDPainter

A usable pixel art paint program written in Python
GNU General Public License v3.0
538 stars 27 forks source link

Great work, I love it ❀️ #32

Open MetinSeven opened 1 year ago

MetinSeven commented 1 year ago

Hi Mark,

Great work, I really love to be able to use DPaint again, without the hassle of installing an Amiga emulator, configuring that, needing to convert IFF to PNG, etcetera. Many thanks for reviving this legendary tool. πŸ‘

I used DPaint on a daily basis for around ten years, for games, demos, TV productions and more. If you've got any questions, I'll be happy to answer them.

A few remarks and requests:

The Shift + X and Shift + Y shortcuts are missing at the moment. Those are the shortcuts for Brush βž” Size βž” Double Horizontal / Vertical

Brush βž” Restore (Shift + B) doesn't work to restore the previous grabbed brush. I'm using Windows 11.

I hope you'll be able to add more features soon. My most eagerly anticipated functions are:

  1. The option to permanently save (default) settings, such as no CRT scanlines, default screen format settings, etcetera.
  2. The Stencil function.
  3. Animation, including the AnimPainting (see 'Painting with Animation' in the DPaint manual) and AnimBrush functionality.
  4. Options to save a color cycling image or an animation as either animated GIF or as a numbered range of PNG images.
  5. The Move requester functionality for automated animation.

Thanks again!

mriale commented 1 year ago

@MetinSeven Thanks for your comments and bug reports. I was able to add the hotkeys for X and Y doubling in the most recent release.

I'm not sure what the restore brush command is supposed to do but doesn't. Could you walk me through specific steps to recreate the problem?

I plan on breaking out the other feature requests because some of these will take a while to implement.

Thanks again for your willingness to help!

MetinSeven commented 1 year ago

Hi Mark,

Thanks for your reply, much appreciated.

The Brush βž” Restore (Shift + B) function restores a previously grabbed brush after you've returned to a one-pixel brush or one of the circular or square brush presets.

An example of how it should work:

  1. Paint something.
  2. Use the Brush tool (B key) to grab (a piece of) what you've painted.
  3. Press the period key (.) to return to a one-pixel brush.
  4. Now pressing Shift + B should restore your previously grabbed brush.
MetinSeven commented 1 year ago

If you don't mind, I'd like to turn this thread into my personal wishes and remarks thread. πŸ™‚

When the coordinates are activated, creating a shape, like a line, rectangle, or grabbing a brush should indicate the dimensions of that. So if you drag a rectangle with the Rectangle tool, you should be able to see how many pixels it is in x and y, instead of the coordinates of your pointer position. Once you've finished dragging and released the mouse button, the coordinates should return to indicating the pointer position.

I would also really love to have more Undo (and Redo) steps, and to have Redo mapped to Control + Shift + Z as well. Shift + U is much less convenient, even though that's the correct key in the old DPaint. For authenticity, you can keep Shift + U for Redo as well, next to Control + Shift + Z, just like Undo is now both U and Control + Z.

Thanks!

MetinSeven commented 1 year ago

Here's the first pixel artwork I've made using PyDPainter. πŸ™‚

metin-seven_isometric-pixel-artist-illustrator_ryuichi-sakamoto-coda-artwork

mriale commented 1 year ago

Nice pixel art! Did you image process this to create the higher resolution version in your portfolio?

I put a few things in the develop branch so far:

I hope to incorporate these into release 1.0.7 within about a week.

It's great to have a real artist using PyDPainter to help me get this thing more polished. Thanks for your input! Sure, I guess we can leave this issue open for you. Plus it has a nice easily remembered power-of-2 number which is also the number of colors in low-res OCS/ECS modes.

MetinSeven commented 1 year ago

Nice pixel art!

Thank you!

I put a few things in the develop branch so far:

  • Prefs/Save Config - Saves current settings. These settings will be reloaded on startup.
  • Fixed Brush Restore functionality
  • Added relative coords when dragging in tools
  • Added Prefs/Flip Coords to make origin in upper left instead of lower left (I did this because it always bugged me)
  • Added Redo hotkey ctrl-shift-Z
  • Changed levels of undo from 5 to 20

I hope to incorporate these into release 1.0.7 within about a week.

That's great, thanks a lot! πŸ‘

It's great to have a real artist using PyDPainter to help me get this thing more polished. Thanks for your input!

πŸ‘Thank you for reviving DPaint with such impressive authenticity. πŸ‘

Sure, I guess we can leave this issue open for you. Plus it has a nice easily remembered power-of-2 number which is also the number of colors in low-res OCS/ECS modes.

Yes, I love such things too. 😊 Even though it's been decades since I used DPaint for game graphics, I still know the 2, 4, 8, 16, 32 etcetera from the top of my head until 8192. 😁

MetinSeven commented 1 year ago

Hi Mark,

Some kind requests:

1: When I move the mouse or Wacom pen slowly, the "ZZ" text balloon shaped pointer keeps popping up in a flashing manner. It would be great if that could be eliminated. I can imagine it might be caused by multiple pointer positions that need to plot the same pixel, because the actual screen resolution is higher than the emulated resolution in PyDPainter?

2: On the Amiga, you could move your pointer one pixel at a time using an Amiga key and a cursor key, you could do a LMB click by combining an Amiga key and the left Alt key, and an Amiga key + the right Alt key was a RMB click.

image

These keyboard equivalents to moving the pointer one pixel at a time and clicking were very useful for exact pixel and brush placement. Using a mouse or Wacom pen, pixel or brush placement can easily jump to a neighboring position, especially when you're not working in magnifier mode.

It would be great if you could add this to PyDPainter. It will also be necessary for authentic recreation of the animation and AnimPainting functionality, as you could place a brush or AnimBrush at an exact position throughout all animation frames by simply holding down left Alt + an Amiga key, and erase a brush or AnimBrush throughout all animation frames by holding right Alt + an Amiga key.

image

Thanks in advance!

MetinSeven commented 1 year ago

Hi Mark,

On the Amiga there was a DPaint competitor called Personal Paint (a.k.a. PPaint). Here's a video review of a fairly recent version.

PPaint had a few features that weren't available in DPaint. One of them was a gradient type that filled an area from the outline towards the center. It enabled you to fill areas like I've done in the face parts and hands of this devil I made for one or our games in the early 1990s:

M7_MC_Devil

Disclaimer: this image looked better on a CRT screen back then. πŸ˜…

I guess the gradient algorithm calculated the largest area between outline and center, then filled a gradient inward from outline to center, also taking pixels into account that intersected the area (like the outer ends of the nails in the image above).

Smaller parts of the same area would get only as much gradient starting from the outline as possible there, as you can see in the fingers, where there's only red and black, not blue. Only the palm of a hand allows for the full gradient, because that's the largest area. I made a separate black-to-blue gradient for the fingernails.

It'd be great if you could add this gradient type to the PyDPainter gradient options.

Thanks in advance for considering this.

MetinSeven commented 1 year ago

By the way, if you prefer me to open separate issues for feature requests, just let me know, and I'll do that.

mriale commented 1 year ago

I think I was able to reproduce that type of shaped gradient by doing this:

It shouldn't be too hard to implement. I'll take a crack at it soon.

And you can leave the thread open. It doesn't bother me.

MetinSeven commented 1 year ago

Great, thanks! πŸ‘

MetinSeven commented 1 year ago

I think I was able to reproduce that type of shaped gradient by doing this:

  • grab a shape as a brush
  • Press F2 to change to color mode
  • Choose the color you want the largest part of the polygon to be
  • Stamp it down
  • Press shift-O to trim the outline
  • Switch to the next color you want (use square bracket keys)
  • Stamp on top of the first shape
  • Repeat trimming, changing color, and stamping until the brush is empty.

I was thinking about this approach to recreate the discussed PPaint gradient type:

When the amount of pixels from the outline to the center of an area is bigger than the amount of colors in a range, you will need to distribute the available range colors across the area radius. Otherwise, the last color of a range would need to be repeated until the center is reached, which would be an interesting variation, like inverse outlines (inlines? πŸ™‚).

Maybe you could implement both options? That'd be great.

mriale commented 1 year ago

Added fill from center fill mode in the latest release 1.0.9. I hope you like it. I was having fun playing with it! fill_both_mode

MetinSeven commented 1 year ago

That's great, Mark, thanks a lot! πŸ‘πŸ‘

MetinSeven commented 1 year ago

It works great, thanks again!

A very minor remark:

I've noticed that right-clicking on any filled shape icon activates the fill type requester, but right-clicking on the filled area drawing tool doesn't. For consistency, it would i.m.h.o. be better to also get the fill type requester when right-clicking on the filled area drawing tool button.

image
mriale commented 1 year ago

I made right-click on the Area Tool bring up the fill requestor. This is now in the develop branch version 1.0.10 dev. I hope to release this in a few days.

MetinSeven commented 1 year ago

Hi Mark,

It would be great if PyDPainter would keep the Screen Format settings when dragging and dropping an image file into the editor.

I'm usually working in magnifier mode of the high XGA resolution of 1024 x 768, to avoid blurry, interpolated upscaling of a low-res Screen Format.

Alternatively, and actually preferred, I wouldn't mind the Screen Format to change to the closest matching Screen Format when an image is opened, if you could implement Nearest Neighbor upscaling of the UI, to get rid of the blurriness, also in magnified mode.

In case Nearest Neighbour results in irregular, non-square pixels, then a sharp interpolation method for the UI would be great, such as Mitchell, Lanczos or Blackman, as long as the blurring isn't replaced by too much ringing.

Thanks in advance!

Here's a screenshot to illustrate the blurry interpolation of a low-res Screen Format (click on it to see it better):

image
MetinSeven commented 1 year ago

And there's one more thing on my PyDPainter wishlist... πŸ™‚

I'd love to have the option (maybe a Preferences setting) to work with the native OS file requester. That'd be great for quick navigation to favorite folders, and file operations such as renaming and deleting.

Thanks!

mriale commented 1 year ago

If you open the mini toolbar, you can click on the scanline button which has 3 states and you can select the non-interpolated scaling. Does that help at all?

MetinSeven commented 1 year ago

If you open the mini toolbar, you can click on the scanline button which has 3 states and you can select the non-interpolated scaling. Does that help at all?

Aha! Yes, that's perfect! Didn't know you could click once more to get the non-blurred option, thanks!

To make the 3 options clear you might consider turning it into a small rollout that opens as soon as you click on it.

MetinSeven commented 1 year ago

Hi Mark,

A wish:

I'd really love to see two more variations on the Brush tool:

I believe DPaint also offered that, at least the higher versions.

Thanks in advance for considering this.

MetinSeven commented 1 year ago

And two more things... πŸ™‚

It'd be great if the active (floating) brush beneath the crosshair wouldn't be saved along with an image. In case this is not known behavior: it happens on Windows 11 when saving as PNG.

I've also noticed that when you switch from NTSC to 1:1 ratio and save the preferences, the next time you drag and drop an image onto the canvas, the NTSC setting gets restored.

Thanks!

mriale commented 1 year ago

Added Brush tool enhancement Issue #66.

Fixed issue with saving active brush when using CTRL-s. In the develop branch now.

To force 1:1 pixel ratio, use Prefs/Force 1:1 Pixels and save that config.

MetinSeven commented 1 year ago

Hi Mark,

I'm still much enjoying your recreation and enhancements of the DPaint experience. πŸ‘

A wish:

I'd love to be able to set the mirroring center between two pixels. This would enable users to center the mirror in a resolution with an even pixel count, like 160 x 160.

Right now, the mirror center is placed on a whole pixel, which in the case of 160 is either the pixel on the right or left side of the absolute center.

Many thanks in advance for considering this.

Here's my latest PyDPainter work:

metin-seven_isometric-pixel-artist-illustrator-character-designer_grayscale-greyscale-robot

mriale commented 1 year ago

@MetinSeven I added a True Symmetry menu option to the Prefs menu that offsets the symmetry by half a pixel when the center of symmetry is centered on the canvas. I was able to see it well when I made a page size of 10x10 pixels. This is now in the develop branch.

With True Symmetry off (same as before the feature was added): Screenshot_20230719_213446

With True Symmetry on: Screenshot_20230719_213223

mriale commented 1 year ago

@MetinSeven Oh, by the way, nice robot pic!

MetinSeven commented 1 year ago

Thanks a lot Mark, for the True Symmetry and your compliment! ❀️

mriale commented 10 months ago

@MetinSeven I'm working on animation right now, but I'm also creating a web site because I anticipate people will want more information when I release the animation features. I have an art gallery, and I put two of your images on it, giving you credit and linking to your web site. The site is still in test. Please let me know if you want me to take the images down. http://test.pydpainter.org/gallery.php

MetinSeven commented 10 months ago

Hi Mark,

Of course you're allowed to use my work, I am sincerely flattered, thank you!

Looking forward to the animation features! πŸ‘

mriale commented 1 week ago

FYI, I finally released the animation features:

https://pydpainter.blogspot.com/2024/09/announcing-pydpainter-200-with-animation.html

MetinSeven commented 1 week ago

Great work again, Mark! Thanks a lot for a the cool new features! Would a ready-to-go macOS version be possible?

mriale commented 1 week ago

Unfortunately, I don't have a Mac to build it on. Someone else could contribute a DMG, though.

MetinSeven commented 1 week ago

Ah, that's too bad. I'm planning to return to Mac in the near future, and will miss PyDPainter, as I'm not tech-savvy enough to compile my own DMG. 😒

MetinSeven commented 1 week ago

By the way, I've made a Mastodon post about the new version, and it's being boosted and faved a lot. πŸ˜ƒπŸ‘