Jump to content

Search the Community

Showing results for tags 'artistic'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Information
    • Forum Rules
    • Paint.NET Search
    • Official Paint.NET website
    • Help Files (paint.net's online documentation)
  • Paint.NET
    • Paint.NET Discussion and Questions
    • The Pictorium
    • Tutorials - Publishing ONLY!
    • Competitions
    • Plugins - Publishing ONLY!
    • Troubleshooting & Bug Reports
  • Off-Topic
    • Grand Theory of Everything
  • Paint.NET Programming / Development
    • Plugin Developer's Central
    • Preview Center
    • Translation and Localization

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start



Website URL



  1. I need to find 2 very important ones. Artistic in effects " ink and inks ( 2nd one) each one is slightly different. I had 3. Also need to find for " effects, objects- add texture" it has a drop down that you can adjust how much you want to fill your photo png or jpeg picture. This is vital. another one was in effects-color, huge drop down window with many effects to choose from. the one I am looking for was called " kill color" but there were 2 ,each worked differently. The one O did would remove the color you chose so you could keep your desired picture but remove the background to make a png image. Another one was in effects- Stylize- Texturize( very improtant). it could also have been located in effects - artistic. I just need Paint.Net back as I had it before I had my W10 installed.😢
  2. Style Transfer Effect Download the Installer from Github (warning - 53 MB download 😟) Requirements: Paint.NET v4.2.* (tested with 4.2.8) Windows 7 or later, 64 bit version (sorry about that😟) a lot of RAM (should work fine with 8 GB, but 16 GB or more are recommended, especially for bigger images) a fast CPU (no GPU hardware acceleration at this point) - it can take a long time to render the effect Supported UI languages: English (including British English to put the "U" back in colour☺️) German French Portuguese Spanish Russian Let me know, if you can help me with adding languages or improve the existing localisation. You can find the effect under "Effects->Artistic->Style Transfer". But what does it do? This effect can be used to transfer the style of one image to another. The effect uses neural networks trained on a bunch of images to achieve this. You can either select a style from list of presets (including a fancy before-and-after-slider for viewing an example): The "Stylize Amount"-slider lets you adjust the ratio between the selected style and the content image style. Note that this is not a simple alpha-blend, though. Even selecting zero ("0") will change the content image significantly, as the model tries to apply the style extracted from the content to the content itself. This process isn't perfect by any means, so keep that in mind. "Style Extraction" and "Style Transfer" models can be selected as well. The "High Quality" setting uses a larger model for extracting and transferring styles. The "Fast"-option selects a smaller, "distilled" version of the higher quality one that requires less memory and less CPU power. The results will be very different between the models and depending on the selected style and amount,you might even prefer one over the other. Or you can create your own style by using an image of your choice: Clicking the "Select Style Image"-button or clicking the style image preview directly, will open a file dialog for image selection. The "Style Image Size"-slider determines the relative scaling factor of the style image that is used before the style is analysed. Think of it as how much of the style image the model is allowed to "see" before the style is extracted. The coloured bar below the slider indicates a size range that will probably yield the best-looking results, with the green arrow pointing at the recommended value. You can select values outside this range (though RAM and minimum size restrictions still apply), but the results may not be as good. The plugin will display a warning, if you choose a combination of a big style image and large style size: This happens, because the processing requires a large amount of RAM and once you use more RAM than is physically installed in your computer, your system will crawl to a halt, become unresponsive, and eventually even crash Paint.NET. The plugin will not use your settings, if they would result in too much RAM being used to protect the system from running out of memory. I hope you find this effect useful and have as much fun playing around with it as I had creating it ☺️! PS: the source code is available on Github - if you can, please use Github to report any issues, bugs, and feature requests.
  3. This effect is a result of a writing by me CodeLab - First Steps (Sponge) and How it's made (Sponge effect) tutorials. You can find it: Effects -> Artistic -> Sponge Download from my PluginPack This effect simulates painting with a sponge. It has a simple and intuitive interface. Before: After:
  4. Effects > Artistic > Stipple Changes in version 1:1: Added "Size variation" to vary dot size as well as spacing. Added "Squash" to allow dots in dark areas to overlap. Added "Distorted dots" for non-circular dots. Added "Transparent background". Replaces an image with a "dotted" version (circles with density depending on the image brightness). The parameters are as follows: Dot color - the color of the dots (unless Colored dots is selected). Background color - the color around the dots. Dot size - the diameter of the dots. Size variation - how small the dots get in the lightest parts of the image (0.0 means all dots have equal size). Spread - controls how far apart the dots get. Affects lighter colors the most; black pixels always causes dots to touch (or overlap if Squash is nonzero). Squash - controls how much dots overlap in the darkest areas. Bias - behave as though the image is darker (negative) or lighter (positive). Does not affect extreme colors (black and white). (This parameter is exactly the same as for the Dot plugin: http://forums.getpaint.net/index.php?/topic/25461-dot-plugin-17th-oct-2012). Lightness threshold - if this value is less than one, the brightest pixels are ignored (so white pixels become empty areas). See the bottom left image in the example above. Colored dots - if selected, the color is taken from the pixel in the middle of the dot. Distorted dots - makes dots non-circular. Transparent background - makes the background completely transparent (Background color is ignored). Reseed - reset the random number generator. Depending on the image, this may sometimes have no effect. Tips Be patient with large images! On my computer it takes 12 seconds to process a 3000x3000 image (but just a few seconds for 2000x2000). Consider reducing the image size first, since the results will probably be similar. The progress bar may not advance, but the effect is still working. This plugin works best with images that either have smooth gradients or high contrast. The bottom left image in the example above was sharpened a lot first (using Effects > Photo > Sharpen with the maximum sharpness three times in a row). The algorithm draws the dots from darkest to lightest, so thin black lines against a white background look much more distinct than white lines against a black background. Download: Stipple1.1.zip As usual, love to see any pics using this plugin!
  5. This effect is a result of a writing by me CodeLab - First Steps (Linocut) tutorial. You can find it: Effects -> Artistic -> Linocut Download from my PluginPack This effect is imitates the linocut technique. It has a simple and intuitive interface. A Tool Size control defines the width of the contours of the image. The Details control determines the amount of detail in the image. The Inverse checkbox to invert the colors of image. Before: After: After when the checkbox Inverse is marked:
  6. This effect is a result of a writing by me CodeLab - First Steps (Color Sketch) tutorial. You can find it: Effects -> Artistic -> Color Sketch Download from my PluginPack This effect simulates a sketch by color pencils and similar built-in Pencil Sketch effect. The result of the effect's work: Before: After:
  7. Name: ArtyThing Description: Uses the 'tone gradient' (edges) of an image to render paths imitating various artistic media. Keywords: artistic, watercolour, oilpaint, pastels, pencils, crayon, sketch, outlines, craquelure, drawing, textures Menu: Effects/Artistic Original release date: 3rd February 2016 Author: Red ochre (John Robbins) .dll name: ArtyThing Compatibility: tested on Pdn 3.5.11 and Pdn 4.0.9 Artything is now in my new v10 pack here: Red ochre plugin pack v10 I wouldn't advise using it on images larger than 1000 pixels square and do be careful when increasing the repetitions, length and stride controls. I do advise saving all work before running it as some combinations of image and settings can cause it to take a very long time. However it is reasonably quick when used correctly. There are many examples below that will hopefully give you some ideas on how to use it. The more complex results (without the settings shown) are where I have run it on multiple copies of the original image in layers. Tip: Using the surface blur or Gaussian blur beforehand often gives good results. Please post your results in this thread... I haven't fully explored what it can do yet, so would love to see what you can come up with! http://i.imgur.com/jj8AflC.png http://i.imgur.com/x0FgdDa.png http://i.imgur.com/bMrVMyJ.png http://i.imgur.com/cXZRpJa.png http://i.imgur.com/2tjkmEE.png http://i.imgur.com/t9DoKV9.png http://i.imgur.com/el7M30z.png http://i.imgur.com/91BzgHv.png http://i.imgur.com/0zxQt2U.png http://i.imgur.com/lbI1p0t.png http://i.imgur.com/hBxJrEg.png http://i.imgur.com/uaDGVn3.png http://i.imgur.com/Tg3lQOw.png http://i.imgur.com/G7fee0F.png http://i.imgur.com/zh3u9Sd.png http://i.imgur.com/o11jsuS.png http://i.imgur.com/rzkmB1e.png http://i.imgur.com/o5KJaVO.png http://i.imgur.com/Ti6XI1J.png http://i.imgur.com/lsUAR1J.png http://i.imgur.com/OxGB49k.png http://i.imgur.com/147CMml.png http://i.imgur.com/eo9rpku.png http://i.imgur.com/LPbWiRu.png http://i.imgur.com/VfgvX7g.png http://i.imgur.com/MD2MSYT.png
  8. Reticulation is wrinkling, cracking the emulsion layer of film. Fatal defect, the result of violations of the treatment process. Sometimes the effect is achieved consciously and used as a means of expression in photography. This plug-in creates pseudo-reticulation effect. You can find it under Effects-> Artistic -> Reticulation. Download from my PluginPack
  9. This effect is a result of a writing by me 'Create the Dragan effect in Paint.NET' tutorial. You can find it: Effects -> Artistic -> Dragan Effect Download from my PluginPack This effect simulates the Dragan's style for photos. The result of the effect's work: Before: After: Also see: CodeLab - First Steps (Dragan Effect).
  10. This effect is a result of a writing by me 'Scratch Art Style in Paint.NET' tutorial. You can find it: Effects -> Artistic -> Scratch Art Download from my PluginPack This effect simulates the Scratch Art style. The result of the effect's work: Before: After:
  11. Name: Grow .dll name: Grow Description: Iteratively compares each pixel to the surrounding ones and takes their values, depending on the mode and threshold chosen. Similar to the built-in 'Median' effect but with more options. Keywords: median, mean, grow, shrink, erode, dilate, dots, circles, squares, diamonds, smooth edge, bokeh, watercolour, outline Menu: Artistic Original release date: March 2020 Author: Red ochre (John Robbins) Compatibility: Pdn 4+ only. Will NOT work on Pdn 3. Installation: For the free (classic) version of paint.net, download the '.zip' file. Right-click and select 'extract all' then place the 'Grow.dll' file in the paint.net/Effects folder. For the MS store version, visit the forum documentation (press the 'F1' key when Pdn is open). Here is a new effect called 'Grow'. I'm publishing it via my website where there are more details and examples. Download link & examples (This should work now - Please let me know, here, if the download is broken - thanks) The image above uses it to turn a photo into a passable watercolour-like image. It has many other possible uses too. Many thanks to Ego Eram Reputo and Pixey 💗for testing the effect (and webpage). Please post examples of what you can make using it, or any questions, in this thread. Enjoy!😉
  12. Scribble Can change a photographic image to look like a hand drawn picture. Many presets including; coloured pencil drawing, graphite pencil, cross-hatched ink and scratchboard. Also the ability to save your own presets. Found under:Effects/Artistic/Scribble Dll name = Scribble It is now included in my plugin pack. *If you have a high d.p.i. machine this version may not display correctly, please use the beta version instead. beta Scribble The user interface (U.I.) is shown below, along with some examples of what it can do. I have found it works well on images of approximately 1000 by 750 pixels or smaller and it is best to keep the 'Rep count' and 'Length multiplier' sliders reasonably low whilst adjusting the effect. The 'Toneband' slider reduces the number of seperate colours in an image. Think of it as the number of different pencils used when the coloured or graphite pencil option is selected. Please feel free to post any scibble images you are pleased with and an idea of the settings you used. Credits Null54 did a wonderful job adding the ability to load and save presets, yet still keeping the controls 'tweakable'. The plugin is based on my 'Furblur' effect, which also relied on code supplied by Null54. So many thanks! E.E.R has also helped with his explanations of how a custom U.I. works and TR's encouragement helped me get it finished!
  13. I built this plugin to fulfill this request: https://forums.getpaint.net/topic/115092-possible/ Trace works like Ink Sketch and similar plugins, but unlike them the amount of artifacts is a lot lower and you can fine-tune things quite a bit. It works really really good with images that are solid colors (or close), for example logos, children's book covers, anything material design. With more complex images you get more artifacts, although there tend to be less of those than normal. In any case, let's take a look at the plugin: Distance -- included mostly for completeness. This will make the tracelines bigger because the pixels being searched are further out -- it's more of an artistic effect than something practical. Threshold -- determines how different a pixel and its neighbors must be in order for that pixel to turn black. Lower thresholds mean traces are more likely to happen, higher thresholds make them less likely. Minimum Neighbors -- the plugin works by comparing each pixel to all eight of its nearest neighbors. By default, if even one of those neighbors is different, the pixel will turn black. By moving this slider up, your trace lines become thinner and you get more accurate detail because more neighbors have to be different. I recommend decreasing the threshold when you increase this slider. Black on Alpha -- By default, the destination image is a bunch of black lines on a white background. If you click this, they'll instead be black lines on alpha, allowing you to do feathering or whatever else you want to do. Preserve Original -- This will combine the lines with the original image, basically giving it an internal outline according to your specifications. I'm not going to look at every setting because most of them are self-explanatory, but I will cover the more arbitrary ones. First, a base image. I've used a collection of windows logos because they meet the "solid colors, less complex image" standard that this plugin works best with. Here's your default settings. Not perfect by any means, but compared to other sketch plugins, it's extremely extremely smooth, bold, and you can actually adjust it to show what you want to show. By adjusting the Minimum Neighbors and Threshold settings you can get more of the image to show. There are some artifacts, but again they're quite low compared to other plugins. I went back to the default settings and clicked "Preserve Original Image" -- now you have the original image but it's just outlined better. Download https://github.com/Xhin23/Paint.net-Plugins/blob/master/Trace.dll
  14. Hi All, Here's my Mosaic effect. (A full list of my effects is here.) Mosaic - Version - 27 February 2017 ©Copyright Tim Mathias 2017. All rights reserved. USE AT YOUR OWN RISK. Menu: Effects -> Artistic -> Mosaic... LavEnt.Effects.Mosaic. Before After The Mosaic effect converts a drawing into a mosaic pattern and uses the Secondary colour as the adhesive or grout between the tesserae. Tessera Width: 2px to 100px Tessera Height: 2px to 100px Tessera Colour: Centre spot sample or average. Tessera Shape Irregularity: 0% (square) to 50% of tessera side length. Adhesive Thickness: 0px to 50px. Antialias: On or off. Possible enhancements I might add in future: Mathematical formulae to generate the mosaic pattern; at the moment it just uses a random irregularity based on a square shape. Fully transparent Secondary colour so that the underlying image shows through the gaps between tessarae. Tip: Try using a dark semi-transparent Secondary colour for the adhesive. Version - 27 February 2017: Recompiled for .NET 4.6.1. Version - 14 May 2009: Added a lock statement to prevent multiple simultaneous renders. Version - 30 March 2009 (813 downloads): Original.
  15. I was looking for a plugin to create a box-fitting image and didn't see any, so I decided to try writing my own. And here it is. Would appreciate any suggestions on how it could be improved etc.. Controls: Max Box Size: Really the max possible size, the boxes tend to be much smaller .. Some interesting effects if size is very low. Reseed: Not that mysterious, just press to randomize the boxes until you get the effect you want. Stroke Color: The color outside the boxes. (Found under Artistic menu) New version! V1.1 boxfitting.zip
  16. This is a plugin which helps you to create symmetric mandalas and mirrored pictures. It takes the upper right triangle(as shown in the first picture) as an input and mirrors it to the other ones. It only works for square images (image width = image height) currently! Download newest version here: Mandala Creator.zip To install just extract the zip and run the installer. It will be installed under effects in the subfolder Artistic. Example for 4 Mirror Option Results If you enjoyed this plugin and would like to support me, click this button: Thank you! Older Versions: Mandala Creator.zip (Version 1.0)
  17. This plugin can be used to add a texture effect to a photo. Examples: It can also be used to add a watermark to a picture: Download: https://www.fosshub.com/Image-Analyzer-old.html?dwl=TexturizePDN1.1.0.1.zip Texturize.zip Unzip the file in the Paint.NET\Effects folder or Documents\paint.net App Files\Effects if PDN was installed from the Windows Store. You can access the feature from the Effects | Artistic menu. Tips: It is quite easy to find usable textures via Google's image search. You can even copy-paste pictures directly from your browser to the plugin: Just right-click on the wanted texture and select Copy. Sometimes you may want to convert the texture to grayscale before using it. If the texture is not tilable (the left edge fits the right edge and the top fits the button) you should select set Fill method to Mirror. You can use a negative Amplitude to invert the 3D effect, i.e. make the texture go "in" or "out". If you like this, please consider donating to the author at http://meesoft.logicnet.dk/Analyzer/support.htm
  18. MODERATORS NOTE: this plugin is incompatible with paint.net v4.2+ I'd like to introduce a new plug-in I call "Mosaic Maniac Collage Paint" This is an early release and I still know of a couple of bugs, but do let me know if you find some. I'm interested in your comments and suggestions. Peter Lukaszuk (Original text found at http://mosaicmaniac.com/Ajax.aspx?c=TabPlugin) Did you ever want to paint using more than a single color or image? Now you can paint with whole collections of images. The plug-in creates a unique non repeatable pattern that closely tries to match the background. Image distribution is based on latest pattern recognition and image matching techniques. Shapes, colors, brightness, as well as many other factors determine where the image is placed. This is an example of pattern collage. The main image of a Jukebox is painted over with collection of music album covers. Notice how the dark images cover the dark areas, yellow cover yellow etc. Tutorial: Step 1: Select an image we will paint on. Using Magic Wand, select an area to paint on. Step 2: From Effects menus select "Artistic" and "Collage Paint" Step 3: You will see a "Mosaic Maniac Collage Paint Options" dialog. Browse for the folder containing your images. All images in the folder will be used. If you want to use only certain images you'll have to create folders and copy only the images you want to use. All images are sized down and only their thumbnails used in pattern painting. "Maximum image size in pixels" textbox specifies that size. Leave the "Rotate images" checkbox checked. All images used will be rotated randomly. Uncheck this field if you are painting a photomosaic. Step 4: Adjust Hue and Transparency for the desired result. Hue Adjustment requires reprocessing and takes some time. Step 5: Voila! Put some leaves on the road and we really managed to mess this nice picture up. Images used in the example can be downloaded from: http://mosaicmaniac.com/download/Flowers.zip http://mosaicmaniac.com/download/Fall%20Leafs.zip Installation: PDN 3.5 Alpha should work now! To install Mosaic Maniac Collage Paint plugin for Paint.NET download the MosaicManiac.dll and copy it to C:\Program Files\Paint.NET\Effects directory. Get the latest one right here. Version 1.0.0906.08 MosaicManiacPaintDotNet.zip
  19. I know mosaic effects have been done before, but hopefully this one is different enough that someone will find it useful. Uses path brush settings. (Found under Artistic) User Interface: Control size: Sliders determine average size of tiles in pixels. Otherwise they determine how many tiles across and down. Tesserae across & Tesserae down: will also affect image due to changes in sampling. lock: when selected, the above sliders will be locked together. Tile irregularity: variation from square tiles to more irregular. Cement Thickness: pixel width between tiles. Cement Color: color between tiles. Reseed: generates new random tile shapes Blend Factors/Positions: These affect the path brush, Something to experiment with. AntiAlias: Does what it says, hopefully Here's an example of a more abstract effect with different brush settings: Tesserae.zip
  20. This plugin is a part of the "Jesse Chunn Plugin Pack" and can be downloaded here This plugin will turn an image (or selection) into a two color image similar to a stencil. Settings: Bias: More primary color or more secondary color. Invert: Swap primary and secondary colors. The left side of these images are the original, the right side had "Stencil" applied with default settings (different primary and secondary colors): Enjoy, Jesse Chunn
  21. Oil Painting+ a new artistic plugin The Idea I was never quite happy with the output of the built-in Oil Painting effect: The built-in Median effect flows better, but also has some problems: I do like mixing the output from my Pastel plugin: ...with the built-in Pencil Sketch effect: That's where I started... The Result I combined the best parts of Oil Painting, Median, Pastel, and Pencil Sketch: Download This is now part of my plugin pack which you can download here: http://forums.getpaint.net/index.php?/topic/32048-v It is designed for small images, like the ones you see in this thread. So, reduce the size of your image before running the effect. Enjoy! __________________________
  22. Download from my plugin set Effects -> Artistic -> Splatter =========================USE==================== Just click and drag the mouse on the dialog. ================================================= Previously known as Pineapple. Make splatters. Byaah! You can adjust some of the settings to make some pretty weird looking stuff. You can also enable/disable antialiasing. Just click the Options button. Examples? Examples! Download from my plugin set
  23. Technorobbo's DoodleMatic V1.4 A Dynamic Edge Finder Version 1.4 Optimized for Paint.Net 4.0 Version 1.3 Uses YUV Colorspace for more intuitive edge detection 1 Slider for detail selection. Adjust drawing Width Added Cursor http://forums.getpaint.net/index.php?/topic/27154-trs-doodlematic-v13-oct-9th-2013/?p=398438 Version 1.2 - 16 levels of Undo Version 1.1 Undo added Menu: Effects->Artistic Demo best viewed in 1080p at http://youtu.be/q_JgUFF0Peg Music by TechnoRobbo Here's a video on how Wilkommen (and Autumn) were created http://youtu.be/fC9ivyWHpiw music by TechnoRobbo(yes that's my falsetto) Willkommen Amsterdam used TR's Scatter to give that pastel look Autumn The Code Hidden Content: // Compiler options: /unsafe /optimize /debug- /target:library /out:"C:\Program Files\Paint.NET\Effects\TRsDoodleMatic.dll" using System; using System.Text; using System.Windows; using System.Reflection; using System.Windows.Forms; using PaintDotNet; using PaintDotNet.Effects; using PaintDotNet.IndirectUI; using PaintDotNet.PropertySystem; using System.Collections.Generic; using System.Drawing; using System.Drawing.Text; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("TRsDoodleMaticPlugin")] [assembly: AssemblyDescription("TRsDoodleMatic Plugin for Paint.NET. (Compiled by Code Lab v1.8)")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("TechnoRobbo")] [assembly: AssemblyProduct("TRsDoodleMaticPlugin")] [assembly: AssemblyCopyright("Copyright © TechnoRobbo")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: AssemblyVersion("1.4.*")] namespace TRsDoodleMaticEffect { public class PluginSupportInfo : IPluginSupportInfo { public string Author { get { return "TechnoRobbo"; } } public string Copyright { get { return ((AssemblyCopyrightAttribute)base.GetType().Assembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false)[0]).Copyright; } } public string DisplayName { get { return ((AssemblyProductAttribute)base.GetType().Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false)[0]).Product; } } public Version Version { get { return base.GetType().Assembly.GetName().Version; } } public Uri WebsiteUri { get { return new Uri("http://www.technorobbo.com"); } } } [PluginSupportInfo(typeof(PluginSupportInfo), DisplayName = "TRsDoodleMatic")] public class TRsDoodleMaticEffectPlugin : PropertyBasedEffect { public static string StaticName { get { return "TR's DoodleMatic"; } } public static Image StaticIcon { get { return null; } } public TRsDoodleMaticEffectPlugin() : base(StaticName, StaticIcon, SubmenuNames.Artistic, EffectFlags.Configurable) { instanceSeed = unchecked((int)DateTime.Now.Ticks); } public enum PropertyNames { Amount1, Amount2, Amount3, Amount4, Amount5, Amount6, Amount7, Amount8, Amount9 } [ThreadStatic] private static Random RandomNumber; private int randomSeed; private int instanceSeed; protected override PropertyCollection OnCreatePropertyCollection() { List<Property> props = new List<Property>(); props.Add(new DoubleProperty(PropertyNames.Amount1, 0.05, 0, 1)); props.Add(new Int32Property(PropertyNames.Amount2, 0, 0, 10)); props.Add(new DoubleVectorProperty(PropertyNames.Amount3, Pair.Create(0.0, 0.0), Pair.Create(-1.0, -1.0), Pair.Create(+1.0, +1.0))); props.Add(new Int32Property(PropertyNames.Amount4, ColorBgra.ToOpaqueInt32(ColorBgra.FromBgra(EnvironmentParameters.PrimaryColor.B, EnvironmentParameters.PrimaryColor.G, EnvironmentParameters.PrimaryColor.R, 255)), 0, 0xffffff)); props.Add(new Int32Property(PropertyNames.Amount5, ColorBgra.ToOpaqueInt32(ColorBgra.FromBgra(EnvironmentParameters.SecondaryColor.B, EnvironmentParameters.SecondaryColor.G, EnvironmentParameters.SecondaryColor.R, 255)), 0, 0xffffff)); props.Add(new Int32Property(PropertyNames.Amount6, 0, 0, 255)); props.Add(new BooleanProperty(PropertyNames.Amount7, false)); props.Add(new Int32Property(PropertyNames.Amount8, 0, 0, 255)); props.Add(new BooleanProperty(PropertyNames.Amount9, false)); return new PropertyCollection(props); } protected override ControlInfo OnCreateConfigUI(PropertyCollection props) { ControlInfo configUI = CreateDefaultConfigUI(props); configUI.SetPropertyControlValue(PropertyNames.Amount1, ControlInfoPropertyNames.DisplayName, "Small Detail/Small Pen ---------------------------Large Detail/Full Page"); configUI.SetPropertyControlValue(PropertyNames.Amount1, ControlInfoPropertyNames.SliderLargeChange, 0.25); configUI.SetPropertyControlValue(PropertyNames.Amount1, ControlInfoPropertyNames.SliderSmallChange, 0.05); configUI.SetPropertyControlValue(PropertyNames.Amount1, ControlInfoPropertyNames.UpDownIncrement, 0.01); configUI.SetPropertyControlValue(PropertyNames.Amount2, ControlInfoPropertyNames.DisplayName, "Line Width"); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.DisplayName, "Doodle Pad (Hold CTRL to Doodle)"); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.SliderSmallChangeX, 0.05); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.SliderLargeChangeX, 0.25); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.UpDownIncrementX, 0.01); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.SliderSmallChangeY, 0.05); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.SliderLargeChangeY, 0.25); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.UpDownIncrementY, 0.01); Surface sourceSurface3 = this.EnvironmentParameters.SourceSurface; Bitmap bitmap3 = sourceSurface3.CreateAliasedBitmap(); ImageResource imageResource3 = ImageResource.FromImage(bitmap3); configUI.SetPropertyControlValue(PropertyNames.Amount3, ControlInfoPropertyNames.StaticImageUnderlay, imageResource3); configUI.SetPropertyControlValue(PropertyNames.Amount4, ControlInfoPropertyNames.DisplayName, "Doodle Color"); configUI.SetPropertyControlType(PropertyNames.Amount4, PropertyControlType.ColorWheel); configUI.SetPropertyControlValue(PropertyNames.Amount5, ControlInfoPropertyNames.DisplayName, "Paper Color"); configUI.SetPropertyControlType(PropertyNames.Amount5, PropertyControlType.ColorWheel); configUI.SetPropertyControlValue(PropertyNames.Amount6, ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlType(PropertyNames.Amount6, PropertyControlType.IncrementButton); configUI.SetPropertyControlValue(PropertyNames.Amount6, ControlInfoPropertyNames.ButtonText, "Clear"); configUI.SetPropertyControlValue(PropertyNames.Amount7, ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlValue(PropertyNames.Amount7, ControlInfoPropertyNames.Description, "Transparent Paper"); configUI.SetPropertyControlValue(PropertyNames.Amount8, ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlType(PropertyNames.Amount8, PropertyControlType.IncrementButton); configUI.SetPropertyControlValue(PropertyNames.Amount8, ControlInfoPropertyNames.ButtonText, "Undo - Erase Last"); configUI.SetPropertyControlValue(PropertyNames.Amount9, ControlInfoPropertyNames.DisplayName, string.Empty); configUI.SetPropertyControlValue(PropertyNames.Amount9, ControlInfoPropertyNames.Description, "Hide Cursor (Before pressing OK)"); return configUI; } private bool noskip = true; protected override void OnSetRenderInfo(PropertyBasedEffectConfigToken newToken, RenderArgs dstArgs, RenderArgs srcArgs) { this.Amount1 = newToken.GetProperty<DoubleProperty>(PropertyNames.Amount1).Value; this.Amount2 = newToken.GetProperty<Int32Property>(PropertyNames.Amount2).Value; this.Amount3 = newToken.GetProperty<DoubleVectorProperty>(PropertyNames.Amount3).Value; this.Amount4 = ColorBgra.FromOpaqueInt32(newToken.GetProperty<Int32Property>(PropertyNames.Amount4).Value); this.Amount5 = ColorBgra.FromOpaqueInt32(newToken.GetProperty<Int32Property>(PropertyNames.Amount5).Value); this.Amount6 = (byte)newToken.GetProperty<Int32Property>(PropertyNames.Amount6).Value; randomSeed = Amount6; this.Amount7 = newToken.GetProperty<BooleanProperty>(PropertyNames.Amount7).Value; this.Amount8 = (byte)newToken.GetProperty<Int32Property>(PropertyNames.Amount8).Value; randomSeed = Amount8; this.Amount9 = newToken.GetProperty<BooleanProperty>(PropertyNames.Amount9).Value; noskip = true; base.OnSetRenderInfo(newToken, dstArgs, srcArgs); } protected override void OnCustomizeConfigUIWindowProperties(PropertyCollection props) { // Change the effect's window title props[ControlInfoPropertyNames.WindowTitle].Value = "TR's DoodleMatic - v1.4"; base.OnCustomizeConfigUIWindowProperties(props); } protected override unsafe void OnRender(Rectangle[] rois, int startIndex, int length) { if (length == 0) return; RandomNumber = GetRandomNumberGenerator(rois, startIndex); for (int i = startIndex; i < startIndex + length; ++i) { Render(DstArgs.Surface, SrcArgs.Surface, rois); } } private Random GetRandomNumberGenerator(Rectangle[] rois, int startIndex) { Rectangle roi = rois[startIndex]; return new Random(instanceSeed ^ (randomSeed << 16) ^ (roi.X << 8) ^ roi.Y); } #region User Entered Code // Submenu: Artistic // Name: TR's DoodleMatic // Title: TR's DoodleMatic - v1.4 // Author: TechnoRobbo // URL: http://www.technorobbo.com #region UICode double Amount1 = 0.05; // [0,1] Small Detail/Small Pen ---------------------------Large Detail/Full Page int Amount2 = 0; // [0,10] Line Width Pair<double, double> Amount3 = Pair.Create(0.0, 0.0); // Doodle Pad (Hold CTRL to Doodle) ColorBgra Amount4 = ColorBgra.FromBgr(0, 0, 0); // Doodle Color ColorBgra Amount5 = ColorBgra.FromBgr(0, 0, 0); // Paper Color byte Amount6 = 0; // [255] Clear bool Amount7 = false; // [0,1] Transparent Paper byte Amount8 = 0; // [255] Undo - Erase Last bool Amount9 = false; // [0,1] Hide Cursor (Before pressing OK) #endregion byte CLS = 255; byte UndoButton = 0; byte UndoCount = 0; byte UndoBase = 0; bool UndoReady = false; bool drawn = false; bool holdimage = false; Bitmap hold = new Bitmap(35, 35); Rectangle orect = new Rectangle(); void YUV(ColorBgra z, ref int[] y) { int[] x = { z.R, z.G, z.B }; y[0] = ((66 * x[0] + 129 * x[1] + 25 * x[2] + 128) >> 8) + 16; y[1] = ((-38 * x[0] - 74 * x[1] + 112 * x[2] + 128) >> 8) + 128; y[2] = ((112 * x[0] - 94 * x[1] - 18 * x[2] + 128) >> 8) + 128; } void Render(Surface dst, Surface src, Rectangle rect) { if (noskip) { noskip = false; try { Bitmap bmp = new RenderArgs(dst).Bitmap; Graphics g = new RenderArgs(dst).Graphics; Graphics z = Graphics.FromImage(hold); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; z.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; z.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; //erase cursor if (holdimage) { g.DrawImage(hold, orect, new Rectangle(0, 0, orect.Width, orect.Height), GraphicsUnit.Pixel); } holdimage = false; double detail = Amount1 * 126 + 1; double psize = Amount1 * .99 + 1; if (CLS != Amount6) { holdimage = false; CLS = Amount6; if (Amount7) { dst.Clear(ColorBgra.FromBgra(0, 0, 0, 0)); } else { dst.Clear(Amount5); } } Rectangle sel = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt(); int[] offx = { 0, -1, -1, -1, 0, 1, 1, 1 }; int[] offy = { -1, -1, 0, 1, 1, 1, 0, -1 }; bool init = true; System.Drawing.Point Start = new System.Drawing.Point((int)((1 + Amount3.First) / 2 * sel.Width), (int)((1 + Amount3.Second) / 2 * sel.Height)); int[] KeyColor = new int[3]; YUV(src.GetBilinearSampleClamped(Start.X, Start.Y), ref KeyColor); System.Drawing.Point NowXY = Start; int direction = 2; bool draw = Control.ModifierKeys == Keys.Control; //========UNDO=============================== string path = System.IO.Path.GetTempPath(); if (drawn != draw) {//check for draw start if (draw && !drawn) { UndoCount++; UndoCount &= 15; UndoBase++; if (UndoBase > 16) { UndoBase = 16; } Bitmap bmp1 = new RenderArgs(dst).Bitmap; bmp1.Save(path + @"TRDM" + UndoCount.ToString() + ".bmp"); bmp1.Dispose(); UndoReady = true; } drawn = draw; } //=========================// if (UndoButton != Amount8) { UndoButton = Amount8; if (UndoReady & (UndoBase > 0)) { UndoBase--; Bitmap bmp2 = new Bitmap(path + @"TRDM" + UndoCount.ToString() + ".bmp"); UndoCount--; UndoCount &= 15; Graphics g1 = new RenderArgs(dst).Graphics; g1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; g1.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; g1.DrawImage(bmp2, 0, 0); g1.Dispose(); bmp2.Dispose(); } } //========UNDO=============================== Rectangle PenSize = sel; if (Amount1 != 1) { PenSize.Width = (int)((double)sel.Width * psize); PenSize.Height = (int)((double)sel.Height * psize); PenSize.X = Start.X - PenSize.Width / 2; PenSize.Y = Start.Y - PenSize.Height / 2; } int csize = Int32Util.Clamp(sel.Width / 80, 10, 30); Rectangle crect = new Rectangle(Start.X - csize / 2, Start.Y - csize / 2, csize, csize); if (draw) { if (holdimage) { g.DrawImage(hold, orect, new Rectangle(0, 0, orect.Width, orect.Height), GraphicsUnit.Pixel); } do { int[] CP = new int[3]; YUV(src.GetBilinearSampleClamped(Start.X, Start.Y), ref CP); double dist = Math.Sqrt((CP[0] - KeyColor[0]) * (CP[0] - KeyColor[0]) + (CP[1] - KeyColor[1]) * (CP[1] - KeyColor[1]) + (CP[2] - KeyColor[2]) * (CP[2] - KeyColor[2])); bool match1 = ((int)dist > detail); if (match1 | !sel.Contains(Start)) { init = false; Start.Y++; NowXY = Start; break; } Start.Y--; } while (init); int timeout = sel.Width * 2 + sel.Height * 2; do { for (int i = -2; i < 6; i++) { int adjust = (i + direction + 8) % 8; System.Drawing.Point pt = new System.Drawing.Point(offx[adjust] + NowXY.X, offy[adjust] + NowXY.Y); if (pt == Start) { NowXY = pt; break; } ColorBgra CP = src.GetBilinearSampleClamped(pt.X, pt.Y); int[] CO = new int[3]; YUV(CP, ref CO); double dist = Math.Sqrt((CO[0] - KeyColor[0]) * (CO[0] - KeyColor[0]) + (CO[1] - KeyColor[1]) * (CO[1] - KeyColor[1]) + (CO[2] - KeyColor[2]) * (CO[2] - KeyColor[2])); bool match = ((int)dist > detail); if (sel.Contains(pt) && match) { NowXY = pt; if (PenSize.Contains(NowXY)) { if (Amount2 != 0) { using (Pen BP = new Pen(Amount4, (float)Amount2)) { g.DrawEllipse(BP, NowXY.X, NowXY.Y, 1, 1); } } else { CP = Amount4; dst[NowXY.X, NowXY.Y] = CP; } } direction = adjust; break; } } timeout--; } while ((NowXY != Start) && (timeout > 0)); } //save new cursor eraser z.DrawImage(bmp, new Rectangle(0, 0, crect.Width + 2, crect.Height + 2), new Rectangle(crect.Left, crect.Top, crect.Width + 2, crect.Height + 2), GraphicsUnit.Pixel); holdimage = true; //store erase location orect = new Rectangle(crect.Left, crect.Top, crect.Width + 2, crect.Height + 2); //hide cursor or not================================================================= if (!Amount9) { Pen cPen = new Pen(Color.Blue, 2); g.DrawEllipse(cPen, new Rectangle(crect.Left + 2, crect.Top + 2, crect.Width - 2, crect.Height - 2)); cPen = new Pen(Color.Yellow, 2); g.DrawEllipse(cPen, new Rectangle(crect.Left + 1, crect.Top + 1, crect.Width - 1, crect.Height - 1)); cPen.Dispose(); } g.Dispose(); bmp.Dispose(); z.Dispose(); } catch (Exception e) { } } else { dst[0, 0] = dst[0, 0]; } } #endregion } } TRsDoodleMatic.zip
  24. TechnoRobbo's Croquis (Dwarf Horde Collaboration) ​Quick Sketch Filter 3.5 compatible v1.2 Slider and angle control by Red Ochre v1.3 RetainColor and Invert Controls by BoltBait v1.4 Pastel Effect by BoltBait Menu: Effects->Artistic CodeLab Source Code (it's a divide algorithm) Hidden Content: // Submenu: Artistic // Name: TRs Croquis // Title: TRs Croquis - v1.4 // Author: TechnoRobbo & Red Ochre & BoltBait // URL: http://www.technorobbo.com #region UICode int Amount1 = 210; // [0,225] Contrast int Amount2 = 0; // [0,255] Clip Lo int Amount3 = 222; // [129,255] Clip Hi double Amount4 = 0.5; // [0.1,10] Distance double Amount5 = 45; // [-180,180] Angle bool Amount6 = false; // [0,1] Retain Color bool Amount7 = false; // [0,1] Invert byte Amount8 = 0; // [1] Pastel Action|None|Invert|Rail #endregion private UnaryPixelOps.Invert invertOp = new UnaryPixelOps.Invert(); //private BinaryPixelOp multiplyOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.Multiply); //for PDN 4 private UserBlendOp multiplyOp = new UserBlendOps.MultiplyBlendOp(); // Multiply for CodeLab 1.8 and Paint.NET 3.5x void Render(Surface dst, Surface src, Rectangle rect) { ColorBgra CP; Color rgb; double k; double l; float offX = (float)(Amount4 * Math.Cos(Amount5 * Math.PI / 180)); float offY = (float)(Amount4 * Math.Sin(Amount5 * Math.PI / 180)); for (int y = rect.Top; y < rect.Bottom; y++) { if (IsCancelRequested) return; for (int x = rect.Left; x < rect.Right; x++) { CP = src.GetBilinearSampleWrapped((float)x + offX,(float)y + offY); rgb = CP.ToColor(); l = rgb.GetBrightness(); CP = src[x,y]; rgb = CP.ToColor(); k = rgb.GetBrightness(); k = (k==0)? 0: l/k; k *=k; k *=255; k = (k>255)?255:k; double inverse = 255 - Amount1; k -= Amount1; k = (k<0) ? 0:k; k= k * 255 / inverse; k =(k < Amount2) ? 0: (k > Amount3) ? 255:k; dst[x,y] = ColorBgra.FromBgra((byte)k , (byte)k ,(byte)k, CP.A); if (Amount7) { dst[x,y] = invertOp.Apply(dst[x,y]); } if (Amount6) { dst[x,y] = multiplyOp.Apply(dst[x,y],src[x,y]); } if (Amount8!=0) { ColorBgra CurrentPixel = dst[x,y]; PaintDotNet.HsvColor hsv = PaintDotNet.HsvColor.FromColor(CurrentPixel.ToColor()); int H = hsv.Hue; int S = hsv.Saturation; int V = hsv.Value; byte A = CurrentPixel.A; switch (Amount8) { case 1: V = 100-V; break; case 2: V = 100; break; } CurrentPixel = ColorBgra.FromColor(new PaintDotNet.HsvColor(H,S,V).ToColor()); CurrentPixel.A = A; dst[x,y] = CurrentPixel; } } } } TRsCroquis.zip
  25. Technorobbo's Brush Strokes This plugin literally redraws your image in simulated brush strokes Menu: Effects->Artistic v.1.0.6 centers brush strokes around original pixels v1.0.5 adds a texture option Hidden Content: v1.0.1 adds Stroke Width Variance v1.0.2+ adds full 360° stroke direction v1.0.3+ fixes Plugin browser compatibility version 1.0.4+ Bristles and accelerated render Music by TechnoRobbo Source code for VS Programmers The Plugin TRsBrushStrokes.zip
  • Create New...