Jump to content

NinthDesertDude

Members
  • Posts

    615
  • Joined

  • Last visited

  • Days Won

    15

Everything posted by NinthDesertDude

  1. I scale the current value based on its distance from the extreme values (min/max of a range) or the center. This is my version of sharpen, which shows a moderate and severe sharpen. Contrast, instead of shrinking the range towards the center, would expand it out from the center (it's the inverse operation). Thus, a max sharpen will shrink it to two values: black and white (which means the min or max values of the range). A max contrast would expand it so that only the center values are possible. That's how I came up with it and designed it; I looked at algorithms for these things, but couldn't find much. I found something about gamma, but it was rather mathematical. I think this method works in practice, but don't quote me on that
  2. @Eli I think you accidentally wrote tolerance when you meant hardness I like to use the gradient tool in radial mode with white as the primary color and something transparent as the secondary color.
  3. I've added it in now. I'm still working feverishly on Brush Factory, but eventually I will come back to it later and add things like a preview, which is why I didn't have tolerance the first time around. Pixel Set Replacer P.S: I was able to replace those letters using a tolerance of 220.
  4. @MJW Here's the main part of the code. //Iterates through each pixel. for (int y = 0; y <= src.Height - token.BmpToReplace.Height; y++) { for (int x = 0; x <= src.Width - token.BmpToReplace.Width; x++) { //Skips all pixels that have been replaced. if (replacedPixels.Count > 0 && replacedPixels[0].X == x && replacedPixels[0].Y == y) { replacedPixels.RemoveAt(0); continue; } //Checks if the first pixel matches. if (ColorBgra.FromColor(token.BmpToReplace.GetPixel(0, 0)).Equals(src[x, y])) { bool totalMatch = true; //Checks if every pixel matches. for (int yy = 0; yy < token.BmpToReplace.Height; yy++) { for (int xx = 0; xx < token.BmpToReplace.Width; xx++) { if (!ColorBgra.FromColor(token.BmpToReplace.GetPixel(xx, yy)).Equals(src[x + xx, y + yy])) { totalMatch = false; break; } } if (!totalMatch) { break; } } //Replaces the matching pixels. They will be skipped. if (totalMatch) { for (int yy = 0; yy < token.BmpReplacing.Height; yy++) { for (int xx = 0; xx < token.BmpReplacing.Width; xx++) { dst[x + xx, y + yy] = ColorBgra.FromColor(token.BmpReplacing.GetPixel(xx, yy)); //All pixels except the first should be skipped. //The first has been checked already. if (xx != 0 && yy != 0) { replacedPixels.Add(new Point(x + xx, y + yy)); } } } replacedPixels.OrderBy(p => p.X).ThenBy(p => p.Y); } } } }
  5. I'm glad it was useful. I took up the work to do that because I had some free time and, after thinking about it, it's sort of a basic utility. I hope the interface isn't too laborious -- I know it's not pretty.
  6. That was enlightening, BoltBait. Thanks. @toe_head2001 I added myself as a company and changed the functionality of lock alpha so it applies after each stroke instead of at the end of the image, which is a more useful method. I can't lock alpha & copy after every individual brush stroke without doing some crazy size calculations (esp. with a rotated brush) and other things like that, so I think doing it after a brush stroke is better. It might be plausibly useful, now.
  7. I won't tear the two plugins apart to fuse a canvas for this plugin. They are both well-integrated into the rest of their respective application, so it would be begging for instability if I did that to Brush Factory. I have plans to implement the two things it does that I don't: use the clipboard image and mark the selected area. I never had enough plugins installed to use or look at that. The use of AssemblyCompany for the author is rather bizarre, but I suppose I can.
  8. Version 1.1 has been released. You can find the changes in the changelog at the bottom, just above the download. I didn't get a big response for the initial release (but then, it had no publicity). Now that a few people have seen it, I would like some feedback if you have the time @Eli I haven't given up on that idea. I might create an alternate way to draw. I was trying to draw as a percent of image size, but now I'm thinking of running a timer that every few ticks will look at the mouse position and add X images at some fixed distance (that might still be %-based). If I get it to work, I'll have it as an optional way to draw under the 'other' tab.
  9. @Bondenson You need to use AA's Assistant, lightly smudge, or use some other tool to smooth the jagged edges. I think if you cropped out the blurred background around the center square, it would be better. That whitish area between the two people needs to be removed so the fire & background can show through. Even though the circle at the top was transparent to begin with, I think it would look better if it was opaque. Similarly, the characters' bodies could be better if they were more opaque (but for this image, I wouldn't make them totally opaque). The white line on the suit of the female that goes to the bottom is red outside of the centered image. Coincidence with fire or otherwise, I think it should be removed. I don't rate images, so I won't assign a rating. @Humility You have already submitted your images to the Image Hospital area, so I won't be reviewing them myself. Also, please read the rules here; you're supposed to wait for at least 3 comments to the previous art before responding. Thanks.
  10. Analysis StarYoshi It's a well-crafted image. I can't think of much to improve on, assuming the butter is intended to look like that and the steak lines are thick and uniform on purpose. After all, it's a cartoon on purpose. It's good. Nai, how in the world! I always reward the most astonishing and difficult images. You have to feel at least a little evil for submitting that in response to StarYoshi's though, right? I have pointers for you. The reflection of the strawberry as viewed through the ice should be lighter (close to the color of the ice), harder to see in general, and less visible near the center where the viewer has to look through more ice to see it. I can see the bumps of the seeds on the shadow; maybe it should have a light blur? If the ice cube isn't a sublimating block of dry ice, it should have water droplets coming down from it. Rating Nai: 3 stars StarYoshi: 1 stars New Tally Nai = x12 StarYoshi = x10
  11. Very similar to my Channel Ops plugin. Mine was missing Absolute and Clamp (though it had the other one-sided versions of clamp). I don't think Absolute does enough to be included in the plugin, if I understand correctly, since it wouldn't be changing anything. Mine had some other additions (Modulus binary operator and sharpen) as additional features. Your UI is an improvement over mine, though.
  12. As I understand it, he created a "launcher" app that does the work of creating the usual paint.net directory for the duration that the pdn executable runs, then deletes the directory when it's closed. Really, executables are all portable as long as all dependencies and the target platform are present. In this case, the .Net Framework is an assumed dependency.
  13. (There used to be text here, but I deleted it.)
  14. Can you upload the original corrupted .png (unedited, not re-saved as a stable PNG) so we can see what's going on? It's not monochromatic if you zoom in. At 51% zoom in PDN, the color shows better than any other zoom level so far. It's yellow, green, red in the center of the squares, and dark blue in the dark border at the bottom. I currently don't think the image can be saved. I noticed the current format is detected as 24-bit. 32-bit is default in PDN, so maybe what you have is a strange file format.
  15. Ctrl + Shift + S is the keyboard shortcut for Save-As. If you accidentally overwrite the original file, undo with Ctrl + Z, save the old file, redo with Ctrl + R, and try the save-as shortcut again. It's a lot faster to use shortcuts than to go through menus. Use Phatch if you have a ton of these files and need a batch converter. As for adding configurable buttons to the menu with enough commands that an option like "save as jpeg" exists, well, that's at least a month of work. It just isn't worth Rick's time; he has a lot of much-needed requests on his plate for working on PDN. I hope you understand
  16. I'm working on it. I should have a solution for you in a few days or less. Edit: Well, that was faster than expected. I've attached the .dll file. You'll need to drop it in the Effects folder under Paint.net. (An easy way to get there is to right-click paint.net, click "open file location" and do that again on the shortcut. You should see the Effects folder at the top, then.) It was fun PixSetRepl.zip ---------------------------- Instructions: Select the tile you want to change. Click the button to store it as the "image to be replaced". Select (or draw) the tile you want to replace it with. Store that as the second image. Go to it again and click "replace". You can also use "reset" to use it on multiple tiles. It might be slow on a large image.
  17. Save the image in the .dds format. It will bring up a dialog box that allows you to specify the compression format. Choose DXT5 or DXT3. Find the box labeled "generate mipmaps" and check it.
  18. Sorry that I didn't include the full log there. It crashed Paint.net with an unhandled OutOfRange exception for something in a MouseDown event handler. It was when right-clicking, so maybe it's related to the number of items in the context menu. I'll post a log if I can get it to crash again.
  19. I would appreciate it if you kept the tone of your question neutral. I almost never use an effect that would cover a lot of the image, so I rarely have to drag a dialog out of the way because I can see most of the image. Effects that I use that cover the screen show the image inside the dialog. I don't suffer from having a dialog on-screen. That's why moving the dialog windows automatically would only hinder the speed I work at. You do have a good point and I don't dispute that. It's a question of how important this is and how it can be implemented painlessly.
  20. PDN calls CreateConfigDialog(), which returns an EffectConfigDialog object that PDN could modify. Or, PDN could change the default behavior of the EffectConfigDialog directly, and nobody needs to update their plugins unless they packaged dependencies of PDN with their plugin. Docked dialogs would work similarly to the 4 docked windows on the side of the PDN window. I think it's totally doable. That said, I actually prefer it to always appear in the center, so there are probably a few users like me that don't want it to change. I think that's going to be the real issue for a change like this to occur.
  21. I agree with Yarrow. Take the cursor-based position and interpolate it with the position of the center of the screen. Find the zoom level at which the cursor-based position hides some of the image and use that zoom level as the point where the interpolation starts (0% interpolated with the center of the screen). When the zoom level is 100%, have the image at the center of the screen. That;s my guess on how to do it, anyway.
  22. Crash Description Grid Warp crashes if you open it for the first time with PDN and right-click before ever clicking a control point. Crashed reliably about 11 times in a row when repeatedly tested, until I left-clicked and moved a control point, after which it never crashed (even after restarting paint.net). Might be a rare bug. Windows 10 Home, 64-bit. Paint.NET version 4.0.12. Grid Warp version 4.0.5. Exception Details System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: source.Size=6,8, newSize=16,16, but the new size must be smaller at PaintDotNet.Rendering.ResizeSuperSamplingRendererBgra..ctor(IRenderer`1 source, Int32 newWidth, Int32 newHeight) in D:\src\pdn\src\Core\Rendering\ResizeSuperSamplingRendererBgra.cs:line 283 at PaintDotNet.Rendering.RendererBgraExtensions.ResizeSuperSampling(IRenderer`1 source, Int32 newWidth, Int32 newHeight) in D:\src\pdn\src\Core\Rendering\RendererBgraExtensions.cs:line 150 More Details After the plugin stopped crashing, it didn't respond to changing the background color for the editing area of the canvas (but responded to changing the background color of the outer area). That's interesting, too.
  23. Plugin authors have control of the window position, and adjusting the window's position programatically for every window would be difficult. You'd have to consider the visible size of the image, the position of the application, and the size of the dialog (and how much space it requires). Plugins that maximize over the window, like Liquify, Smudge, Brush Factory, etc. can't be moved out of the way without preventing them from maximizing in the first place. Worse yet, depending on the current position of all the windows, the location that the plugin appears could surprise the user. If anything, I suppose Rick could change the PDN effect dialog's default behavior so it's partially transparent when it has no focus by any input device. Still, it's a lot more work than it sounds like. So it's actually a bit of a time-consuming task, with a lot of user-design questions to be asked. Since Rick has more prevalent things to work on, I think something like this probably won't happen.
  24. @Eli I attempted it, but it was countered by lag. I think I'd have to rewrite this plugin to do something like that. I hope that's not a deal-breaker. Alternatively, you or another person can try to implement it. @homebrew We make all of our plugins on an external canvas because it's the only way to hack in these kinds of features. PDN does not lend itself to canvas-type plugins; there is no way to make it native. Rick would have to modify the API to allow us to write tool plugins or something.
  25. @toe_head2001 Great suggestion. I'm looking into it. I'll have to modify it to allow middle-click panning.
×
×
  • Create New...