• Content count

  • Joined

  • Last visited

  • Days Won


MJW last won the day on June 16

MJW had the most liked content!

Community Reputation



About MJW

  • Rank
    2017 Radiance Award Winner

Profile Information

  • Gender

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. MJW

    Black and White+

    Thanks Andrew. Glad to hear it's fixed. I'm annoyed with myself for not getting it fixed in the original release. As I mentioned, I fixed it in the source file, then forgot to save the change.
  2. MJW

    Black and White+

    I see. That's the problem I think I fixed after you posted yesterday. I noticed the invalid support info from your post, but that doesn't seem to match what IRON67 was writing about. Does the updated version show up correctly? As I mentioned, I think that problem resulted from having an bad URL string.
  3. MJW

    Black and White+

    I fixed a problem with the support info. The website URL was bad, which for some reasion makes the other support info not show up. (I'd fixed the URL, but apparently forgot to save the corrected source file, so it remained bad after the next edi @AndrewDavid I don't see it appearing twice in the list you show. I only see the built-in Black and White, followed by Black and White+. Maybe I misunderstand your point.
  4. MJW

    Desaturate Plugin?

    Yes, C# is the Paint.NET programming language. Strictly speaking, any managed .NET language, such as C++/CLI, will work for writing plugins, but virtually every plugin is written in C#. I vaguely recall there were some plugins written in Visual Basic. Anyone who knows C++ should have no problem writing C#.
  5. MJW

    Desaturate Plugin?

    Sorry it doesn't do what you want to do. Hope you find something that does..
  6. MJW

    Desaturate Plugin?

    Black and White+ should meet most of your grayscale needs. As I understand them, the V in HSV is the max channel; the L in HSL is the average of the min and max channels.
  7. MJW

    Black and White+

    I'm releasing version 1.1, which has additional controls to use the minimum and maximum channels. NOTE: HSV Value is the max channel; HSL Lightness is the average of the min and max channels.
  8. This plugin displays and reorients equirectangular images. Equirectangular images are panoramic views, which represent a complete spherical image in longitude-latitude format. The plugin is (perhaps not too sensibly) in the Height Map menu. The plugin DLL (version 1.0.0): Equirectangular Viewer.zip The Help menu description: Equirectangular Viewer projects an equirectangular image onto the canvas, as if viewed through a window, and also allows the orientation of an equirectangular image to be changed. Normally the width of an equirectangular projection is twice the height, but any image will be scaled to cover the entire sphere The controls are: Mode: Specifies the result to display in the canvas. When View Equirectangular Image is selected, the portion of the image within the field of view will be projected onto the canvas. When Transform Equirectangular Image is selected, the image will be transformed into a new equirectangular image, with a different orientation. Get Image From Clipboard: When selected, the image will be taken from the clipboard instead of the canvas. Position Specifies View Center: When this option is disabled, moving the View Position control causes the image to move in the same direction. When this option is enabled, the position of the control indicates the location in the image to position at the center of the canvas. View Position: Specifies the position of the sphere represented by the equirectangular image. View Rotation: Specifies a counterclockwise rotation angle, in degrees. The rotation is centered at the center of the canvas. Field of View: In viewing mode, specifies the angular field of view, measured relative to the canvas diagonal. Sphere Nearness: In viewing mode, specifies the distance to the sphere represented by the equirectangular image. When zero, the sphere is at infinity. Larger values move the sphere closer. Antialias: Specifies that antialiasing should be used. Antialias Quality: Specifies the number of samples in each direction per pixel. The total number of samples per pixel is this value squared. Equirectangular images are widely available on the Internet. Here is a small example: This plugin may or may not be useful to anyone. I wrote it mostly to give myself better insight into some aspects of equirectangular images. The Position Specifies View Center control was added because I wanted the default action of the control to match the similar control in the Texture Shader, but it's sometime useful for the control to specify the region of the map to be located at the center of the final image.
  9. It's a matter of personal preference, but I use BoltBait's Paste Alpha plugin. (Transferring the alpha from one image to another is one of the most useful techniques I know. I use it all the time.)
  10. MJW

    Paste Warp+

    I'm releasing version 1.1.0. The changes: I fixed a tiling problem that sometimes resulted in cracks between the tiles. I added Bulge controls to compress or expand the center of the image. I rearranged the controls, grouping the horizontal and vertical controls. I increased the Distortion range to beyond 1, which is sometimes useful when the image size is reduced.
  11. MJW

    Paste From Clipboard

    I've released version 1.3.0. For some of the tiling modes, there were cracks between the tiles. I'm not sure if it was a bug in the original version, or if PDN's method of handling the alpha for image edge pixels changed. In either case, I hope I've fixed the problem.
  12. Oh, now I know what caused the aliasing I was seeing. I created the selection with the Magic Wand. I should have remembered, but didn't, a recent comment about the Magic Wand and aliased selections: It also make me realize that my linear interpolation along the boundary will not solve all the problems. It's somewhat of a relief to know there's no easy solution, since it means I can move on to writing new plugins, rather than improving one from way back when.
  13. Thank you Rick. The Paste Warp+ algorithm is very simplistic, and doesn't work with holes, or anything much fancier than convex regions. I think before I make any requests for additional features, I'll try to figure out if my linear interpolation of the border pixels solves the problem I thought I saw, and if it doesn't, whether it's a weakness in the method or a bug in my implementation. Not that it matters, but I don't actually do a per-pixel IsVisible() test; I do the following: Rectangle[] selectionRectangles = EnvironmentParameters.GetSelection(Src.Bounds).GetRegionScansInt(); foreach (Rectangle r in selectionRectangles) { for (int y = r.Top; y < r.Bottom; y++) { int selY = y - selTop; if (xBounds[selY].Start > r.Left) xBounds[selY].Start = r.Left; if (xBounds[selY].End < r.Right) xBounds[selY].End = r.Right; } for (int x = r.Left; x < r.Right; x++) { int selX = x - selLeft; if (yBounds[selX].Start > r.Top) yBounds[selX].Start = r.Top; if (yBounds[selX].End < r.Bottom) yBounds[selX].End = r.Bottom; } } I can't remember from where I took that idea of determining the selected pixels by iterating over the selection rectangles, but it seems like it would be more efficient. (That is, assuming GetRegionsScansInt() doesn't call IsVisible a bunch of time to determine the selection rectangles!)
  14. I should check my own code more carefully. I already linearly interpolate between the selection-border pixels when in AA mode. That should smooth the border, though when I used the plugin recently, I believe I saw some very noticeable stair steps, even in AA mode. I'll need to investigate further. I'd still be interested in knowing if the selection boundary can be obtained by plugins in a more precise version than that obtained by testing whether pixels are selected or not selected.
  15. I have a plugin called Paste Warp+ that distorts an image in the clipboard to fit the shape of the selection. I'm hoping to eliminate the aliasing that results from the roughness of the selection boundary. If IsVisible() with floating-point arguments works to subpixel precision, that would probably provide the information I need. If the finer-precision information for the selection isn't available, I will probably try linearly or quadratically interpolating between the selection-boarder pixels, since I'm much more concerned with eliminating the stair-stepping along the border than I am in exactly matching the selection.