Popular Post BoltBait Posted February 9, 2020 Popular Post Share Posted February 9, 2020 Version 1.1 (Requires Paint.NET v4.2.9+) Creative Text Pro takes the fonts on your system and uses them to create professional looking 3D text. The available controls allow you to customize your text to infinite possibilities! If you have ever wondered how to make 3D text in Paint.NET... Or, how to make gold text in Paint.NET... Or, how to make chrome text in Paint.NET... this is the plugin for you! Creative Text Pro includes 6 black-and-white algorithms that can be adjusted and/or colorized, including: Normal, Subtle, Dark, Chrome, Light, and Bright. The lighting direction for highlights/shadows on the letters is completely adjustable to any angle. Creative Text Pro also includes 45 seamless textures that can be applied to the text: Those textures can be rotated and the colors adjusted for near infinite possibilities! For example, texture Rust 2 can be color corrected to green for a nice "moss" texture. Turtle can be color corrected to orange for a nice giraffe effect. The Gold Foil texture can be color corrected to purple for a nice purple foil effect... etc. OK, but you said "infinite", where's the rest? Ha! OK, the rest are up to you! The last option in the variation/texture drop-down box is Clipboard. So, any image you have on your clipboard can be applied to the text, rotated, and color corrected. Infinite! The UI has 4 sections Objects Also, if you want to apply the 3D effect to an existing object instead of text, check the box at the top of the UI: Where did my background go? Text should always be rendered to a separate layer, that way shadows can be added behind it and you can move the text where it needs to go. In that light, text rendered by this plugin is placed on a transparent background. You're welcome. How do I add more fonts? Where is my favorite font, it's not listed? Creative Text Pro uses the fonts that are already installed on your system. However, not all of your fonts may be compatible with this plugin, so only those fonts that will work are shown in the font drop-down box. Generally, fonts need to be True Type (TTF) files that support Normal rendering. (Fonts that only support Italics are not included.) Brought to you by: and Download: This is now part of my plugin pack, you can download it there: Go There! Donate Once installed, you will find it in Effects > Text Formations > Creative Text Pro menu. This plugin is professional grade and a ton of time was taken to make it. Won't you consider donating? If you can't afford to donate (I totally understand), how about just a "like" on this post? Source Code: Included here is a stripped down version, just so you plugin authors can see how it works. Hopefully, this code will inspire you to do something great! Spoiler The code and algorithms are copyright 2020 by BoltBait and welshblue and may not be used without permission. // Name: Creative Text // Submenu: Text Formations // Author: BoltBait and Welshblue // Title: Creative Text v1.0 // Version: 1.0 // Desc: 3D Metallic Text // Keywords: 3D|metal|text // URL: https://boltbait.com/pdn/ #region UICode TextboxControl TextVar = "TEST"; // Text FontFamily fontName = new FontFamily("Arial"); // IntSliderControl FontSize = 108; // [10,200] Size AngleControl LightAngle = -45; // [-180,180] Lighting Direction IntSliderControl blurAmt = 4; // [0,50] Height ListBoxControl variation = 0; // |Normal|Subtle Variation|Dark Variation|Chrome Variation|Light Variation|Bright Variation|Copper|Gold IntSliderControl variationPct = 75; // [0,100] {!variation} CheckboxControl addColor = false; // Add color: Hue / Saturation Adjustment IntSliderControl colorAdjust = 0; // [-180,180,2] {addColor} IntSliderControl satAdjust = 100; // [0,200,3] {addColor} #endregion string theText; // Working surface Surface wrk = null; Surface txt = null; // Setup for calling the Emboss effect EmbossEffect embossEffect = new EmbossEffect(); PropertyCollection embossProps; // Setup for calling the Unfocus effect UnfocusEffect unfocusEffect = new UnfocusEffect(); PropertyCollection unfocusProps; // Setup for calling the Hue and Saturation Adjustment function HueAndSaturationAdjustment saturationEffect = new HueAndSaturationAdjustment(); PropertyCollection saturationProps; // Setup for calling the Sepia effect SepiaEffect sepiaEffect = new SepiaEffect(); PropertyCollection sepiaProps; // Setup for using pixel op private UnaryPixelOps.Invert invertOp = new UnaryPixelOps.Invert(); // Setup for selected blending op private BinaryPixelOp multiplyOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.Multiply); private BinaryPixelOp differenceOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.Difference); private BinaryPixelOp lightenOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.Lighten); private BinaryPixelOp overlayOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.Overlay); private BinaryPixelOp screenOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.Screen); private BinaryPixelOp colorburnOp = LayerBlendModeUtil.CreateCompositionOp(LayerBlendMode.ColorBurn); protected override void OnDispose(bool disposing) { if (disposing) { // Release any surfaces or effects you've created if (wrk != null) wrk.Dispose(); wrk = null; if (txt != null) txt.Dispose(); txt = null; if (embossEffect != null) embossEffect.Dispose(); embossEffect = null; if (unfocusEffect != null) unfocusEffect.Dispose(); unfocusEffect = null; if (saturationEffect != null) saturationEffect.Dispose(); saturationEffect = null; if (sepiaEffect != null) sepiaEffect.Dispose(); sepiaEffect = null; } base.OnDispose(disposing); } // This single-threaded function is called after the UI changes and before the Render function is called // The purpose is to prepare anything you'll need in the Render function void PreRender(Surface dst, Surface src) { if (wrk == null) { wrk = new Surface(src.Size); } if (txt == null) { txt = new Surface(src.Size); } if (IsCancelRequested) return; txt.Clear(ColorBgra.White); theText = TextVar; if (string.IsNullOrEmpty(theText)) theText = " "; // For older Paint.NET use this line instead of the next: // Rectangle selection = EnvironmentParameters.GetSelection(srcBounds).GetBoundsInt(); Rectangle selection = EnvironmentParameters.SelectionBounds; // Setup for drawing using GDI+ commands using (Graphics g = new RenderArgs(txt).Graphics) using (Region gClipRegion = new Region(txt.Bounds)) using (SolidBrush brush = new SolidBrush(ColorBgra.Black)) using (Font font = new Font(fontName, FontSize)) { g.Clip = gClipRegion; g.TextRenderingHint = TextRenderingHint.AntiAlias; g.DrawString(theText, font, brush, selection.Left, selection.Top); } // Unfocus unfocusEffect.EnvironmentParameters = EnvironmentParameters.CloneWithDifferentSourceSurface(txt); unfocusProps = unfocusEffect.CreatePropertyCollection(); PropertyBasedEffectConfigToken unfocusParameters = new PropertyBasedEffectConfigToken(unfocusProps); unfocusParameters.SetPropertyValue(UnfocusEffect.PropertyNames.Radius, blurAmt); unfocusEffect.SetRenderInfo(unfocusParameters, new RenderArgs(wrk), new RenderArgs(txt)); if (IsCancelRequested) return; unfocusEffect.Render(new Rectangle[1] {wrk.Bounds},0,1); // Emboss embossEffect.EnvironmentParameters = EnvironmentParameters.CloneWithDifferentSourceSurface(wrk); embossProps = embossEffect.CreatePropertyCollection(); PropertyBasedEffectConfigToken embossParameters = new PropertyBasedEffectConfigToken(embossProps); embossParameters.SetPropertyValue(EmbossEffect.PropertyNames.Angle, LightAngle); embossEffect.SetRenderInfo(embossParameters, new RenderArgs(txt), new RenderArgs(wrk)); if (IsCancelRequested) return; embossEffect.Render(new Rectangle[1] {txt.Bounds},0,1); if (addColor) { // Sepia sepiaEffect.EnvironmentParameters = EnvironmentParameters.CloneWithDifferentSourceSurface(dst); sepiaProps = sepiaEffect.CreatePropertyCollection(); PropertyBasedEffectConfigToken sepiaParameters = new PropertyBasedEffectConfigToken(sepiaProps); sepiaEffect.SetRenderInfo(sepiaParameters, new RenderArgs(dst), new RenderArgs(dst)); // Hue/Saturation saturationEffect.EnvironmentParameters = EnvironmentParameters.CloneWithDifferentSourceSurface(dst); saturationProps = saturationEffect.CreatePropertyCollection(); PropertyBasedEffectConfigToken saturationParameters = new PropertyBasedEffectConfigToken(saturationProps); saturationParameters.SetPropertyValue(HueAndSaturationAdjustment.PropertyNames.Hue, colorAdjust); saturationParameters.SetPropertyValue(HueAndSaturationAdjustment.PropertyNames.Saturation, satAdjust); saturationParameters.SetPropertyValue(HueAndSaturationAdjustment.PropertyNames.Lightness, 0); saturationEffect.SetRenderInfo(saturationParameters, new RenderArgs(dst), new RenderArgs(dst)); } } // Here is the main multi-threaded render function unsafe void Render(Surface dst, Surface src, Rectangle rect) { // For older Paint.NET use this line instead of the next: // Rectangle selection = EnvironmentParameters.GetSelection(srcBounds).GetBoundsInt(); Rectangle selection = EnvironmentParameters.SelectionBounds; // Render text to the WRK surface for final anti-aliasing wrk.Clear(rect,Color.Transparent); using (Graphics g = new RenderArgs(wrk).Graphics) using (Region gClipRegion = new Region(rect)) using (SolidBrush brush = new SolidBrush(ColorBgra.Black)) using (Font font = new Font(fontName, FontSize)) { g.Clip = gClipRegion; g.TextRenderingHint = TextRenderingHint.AntiAlias; g.DrawString(theText, font, brush, selection.Left, selection.Top); } double percentage = variationPct / 100.0; for (int y = rect.Top; y < rect.Bottom; y++) { if (IsCancelRequested) return; for (int x = rect.Left; x < rect.Right; x++) { ColorBgra WorkPixel = wrk[x,y]; ColorBgra dstPixel = txt[x,y]; ColorBgra txtPixel; switch (variation) { case 1: // Subtle txtPixel = invertOp.Apply(dstPixel); txtPixel.A = (byte)(txtPixel.A * percentage); dstPixel = overlayOp.Apply(dstPixel,txtPixel); break; case 2: // Dark txtPixel = invertOp.Apply(dstPixel); txtPixel.A = (byte)(txtPixel.A * percentage); dstPixel = multiplyOp.Apply(dstPixel,txtPixel); break; case 3: // Chrome txtPixel = invertOp.Apply(dstPixel); txtPixel.A = (byte)(txtPixel.A * percentage); dstPixel = differenceOp.Apply(dstPixel,txtPixel); break; case 4: // Light txtPixel = invertOp.Apply(dstPixel); txtPixel.A = (byte)(txtPixel.A * percentage); dstPixel = lightenOp.Apply(dstPixel,txtPixel); break; case 5: // Bright txtPixel = invertOp.Apply(dstPixel); txtPixel.A = (byte)(txtPixel.A * percentage); dstPixel = screenOp.Apply(dstPixel,txtPixel); break; case 6: // Copper //txtPixel = ColorBgra.FromBgra(30,45,255,(byte)(255 * percentage)); txtPixel = ColorBgra.FromBgra(0x60,0x6A,0xA0,(byte)(255 * percentage)); dstPixel = colorburnOp.Apply(dstPixel,txtPixel); break; case 7: // Gold txtPixel = ColorBgra.FromBgra(0,215,255,(byte)(255 * percentage)); dstPixel = colorburnOp.Apply(dstPixel,txtPixel); break; default: break; } dstPixel.A = WorkPixel.A; dst[x,y] = dstPixel; } } if (addColor) { if (variation < 6) { if (IsCancelRequested) return; sepiaEffect.Render(new Rectangle[1] {rect},0,1); } if (IsCancelRequested) return; saturationEffect.Render(new Rectangle[1] {rect},0,1); } } Credit: I could never have written this plugin by myself. So, many thanks goes out to the development team: @BoltBait wrote the plugin @welshblue supplied the creative algorithm, the icon, and many seamless textures @toe_head2001 supplied the font filtering code @Ego Eram Reputo supplied valuable feedback, encouragement, and testing Enjoy. 😎 14 2 11 Quote Download: BoltBait's Plugin Pack | CodeLab | and a Free Computer Dominos Game Link to comment Share on other sites More sharing options...
yellowman Posted February 10, 2020 Share Posted February 10, 2020 Hi @BoltBait After installing the plugin, I am getting this message when I am trying to use it: File: C:\Program Files\Paint.NET\Effects\CreativeTextPro.dll Name: CreativeTextProEffect.CreativeTextProEffectPlugin Version: 1.0.7344.20057 Author: Copyright ©2020 by BoltBait and Welshblue Copyright: 3D Metallic Text Website: https://boltbait.com/pdn/ Full error message: PaintDotNet.WorkerThreadException: Worker thread threw an exception ---> System.MissingMethodException: Method not found: 'System.Drawing.Rectangle PaintDotNet.Effects.EffectEnvironmentParameters.get_SelectionBounds()'. at CreativeTextProEffect.CreativeTextProEffectPlugin.PreRender(Surface dst, Surface src) at CreativeTextProEffect.CreativeTextProEffectPlugin.OnSetRenderInfo(PropertyBasedEffectConfigToken token, RenderArgs dstArgs, RenderArgs srcArgs) at PaintDotNet.Effects.Effect`1.OnSetRenderInfo(EffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs) in D:\src\pdn\src\Effects\Effect`1.cs:line 71 at PaintDotNet.Effects.BackgroundEffectRenderer.ThreadFunction() in D:\src\pdn\src\PaintDotNet\Effects\BackgroundEffectRenderer.cs:line 264 --- End of inner exception stack trace --- at PaintDotNet.Effects.BackgroundEffectRenderer.DrainExceptions() in D:\src\pdn\src\PaintDotNet\Effects\BackgroundEffectRenderer.cs:line 454 at PaintDotNet.Effects.BackgroundEffectRenderer.Abort() in D:\src\pdn\src\PaintDotNet\Effects\BackgroundEffectRenderer.cs:line 410 at PaintDotNet.Effects.BackgroundEffectRenderer.Start() in D:\src\pdn\src\PaintDotNet\Effects\BackgroundEffectRenderer.cs:line 356 at PaintDotNet.Menus.EffectMenuBase.<>c__DisplayClass41_3.<RunEffectImpl>b__5() in D:\src\pdn\src\PaintDotNet\Menus\EffectMenuBase.cs:line 941 Quote My GalleryMy YouTube Channel "PDN Tutorials" Link to comment Share on other sites More sharing options...
BoltBait Posted February 10, 2020 Author Share Posted February 10, 2020 This plugin requires Paint.NET v4.2.9 (or beyond) so you'll need to upgrade to the latest version before you can enjoy it. 1 Quote Download: BoltBait's Plugin Pack | CodeLab | and a Free Computer Dominos Game Link to comment Share on other sites More sharing options...
yellowman Posted February 10, 2020 Share Posted February 10, 2020 Thank you very much @BoltBait, Everything works well now, of course after your help 😀 3 3 Quote My GalleryMy YouTube Channel "PDN Tutorials" Link to comment Share on other sites More sharing options...
AndrewDavid Posted February 10, 2020 Share Posted February 10, 2020 4 1 Quote Link to comment Share on other sites More sharing options...
HyReZ Posted February 10, 2020 Share Posted February 10, 2020 (edited) http://apmauldin.com/Image_Storage/Creative_Text_Pro_v1a.jpg Edited July 16, 2021 by HyReZ 2 1 Quote Link to comment Share on other sites More sharing options...
lynxster4 Posted February 10, 2020 Share Posted February 10, 2020 (edited) This needs pinned...it is very 'Photoshop-ey'! Can't wait to use it. Thank you to everyone involved! 😁 EDIT: added image Edited February 10, 2020 by lynxster4 2 1 Quote My Art Gallery | My Shape Packs | ShapeMaker Mini Tut | Air Bubble Stained Glass Chrome Text with Reflections | Porcelain Text w/ Variegated Coloring | Realistic Knit PatternOpalescent Stained Glass | Frosted Snowman Cookie | Leather Texture | Plastic Text | Silk Embroidery Visit my Personal Website "Never, ever lose your sense of humor - you'll live longer" Link to comment Share on other sites More sharing options...
Pixey Posted February 10, 2020 Share Posted February 10, 2020 Thanks Guys - this is amazing 1 1 Quote How I made Jennifer & Halle in Paint.net My Gallery | My Deviant Art "Rescuing one animal may not change the world, but for that animal their world is changed forever!" anon. Link to comment Share on other sites More sharing options...
Roger the Dodger Posted February 10, 2020 Share Posted February 10, 2020 Hi Boltbait & Welshblue Firstly I am very grateful to both of you for the hard work in creating this excellent Plug-in. However, I have received a scare message from Windows 10 upon trying to install, should I just ignore the scary message and install? Also Win10 is saying do I want to make changes to the "Command Line" is this normal? Or could I just cut and Paste the DLL into the text folder?? Kindest regards Roger the Dodger🍷🍷🍷🍷🍷Glug,glug,glug😜 Quote Link to comment Share on other sites More sharing options...
BoltBait Posted February 10, 2020 Author Share Posted February 10, 2020 3 minutes ago, Roger the Dodger said: could I just cut and Paste the DLL into the text folder? Just install it by downloading the zip file to your desktop. Right-click on the zip file and click “Properties” then “unblock” the file and click the apply button. Unzip the zip file to your desktop and run the included install batch file. Quote Download: BoltBait's Plugin Pack | CodeLab | and a Free Computer Dominos Game Link to comment Share on other sites More sharing options...
Roger the Dodger Posted February 10, 2020 Share Posted February 10, 2020 Thank you Boltbait😊 1 Quote Link to comment Share on other sites More sharing options...
Roger the Dodger Posted February 10, 2020 Share Posted February 10, 2020 1 1 Quote Link to comment Share on other sites More sharing options...
Ego Eram Reputo Posted February 10, 2020 Share Posted February 10, 2020 4 hours ago, lynxster4 said: This needs pinned... Done. I too feel this is superb bit of kit. Many, many thanks BoltBait & Welshblue ⭐ 2 Quote ebook: Mastering Paint.NET | resources: Plugin Index | Stereogram Tut | proud supporter of Codelab plugins: EER's Plugin Pack | Planetoid | StickMan | WhichSymbol+ | Dr Scott's Markup Renderer | CSV Filetype | dwarf horde plugins: Plugin Browser | ShapeMaker Link to comment Share on other sites More sharing options...
lynxster4 Posted February 12, 2020 Share Posted February 12, 2020 One more example; some 'lava' text. 'Lava' texture made by me in PDN. I could play with this all day... 1 2 Quote My Art Gallery | My Shape Packs | ShapeMaker Mini Tut | Air Bubble Stained Glass Chrome Text with Reflections | Porcelain Text w/ Variegated Coloring | Realistic Knit PatternOpalescent Stained Glass | Frosted Snowman Cookie | Leather Texture | Plastic Text | Silk Embroidery Visit my Personal Website "Never, ever lose your sense of humor - you'll live longer" Link to comment Share on other sites More sharing options...
Eli Posted February 12, 2020 Share Posted February 12, 2020 Thank You BoltBait! 1 Quote Link to comment Share on other sites More sharing options...
lynxster4 Posted February 12, 2020 Share Posted February 12, 2020 14 minutes ago, welshblue said: It also works great on dingbats. And other symbol fonts...I discovered that, too. Beautiful examples above. Quote My Art Gallery | My Shape Packs | ShapeMaker Mini Tut | Air Bubble Stained Glass Chrome Text with Reflections | Porcelain Text w/ Variegated Coloring | Realistic Knit PatternOpalescent Stained Glass | Frosted Snowman Cookie | Leather Texture | Plastic Text | Silk Embroidery Visit my Personal Website "Never, ever lose your sense of humor - you'll live longer" Link to comment Share on other sites More sharing options...
Eli Posted February 12, 2020 Share Posted February 12, 2020 @welshblue Beautiful textures. Thank You! 1 1 Quote Link to comment Share on other sites More sharing options...
DrewDale Posted February 15, 2020 Share Posted February 15, 2020 This is an amazing plugin, thanks for creating it. I will post some result in a day or so. Cheers @BoltBait & @welshblue 😎 1 Quote Link to comment Share on other sites More sharing options...
BoltBait Posted February 17, 2020 Author Share Posted February 17, 2020 Version 1.1 has been released! New features: Reorganize the UI into 4 logical sections Added lots of textures including Tiger, Zebra, Snake, etc. - Thanks to @welshblue Added ability to zoom in and out from the textures Added "soft light" algorithm (does not look good with Chrome, but it does with everything else) Added ability to apply 3D textures to existing objects (instead of text) - Suggestion from @Ego Eram Reputo Added "rules" to the UI--controls are disabled when they would not effect the current choices Added more examples to the initial post 4 2 Quote Download: BoltBait's Plugin Pack | CodeLab | and a Free Computer Dominos Game Link to comment Share on other sites More sharing options...
lynxster4 Posted February 17, 2020 Share Posted February 17, 2020 Oh...oh...oh... Fantastic! The option to use on an object makes everything available to use! Everyone's shapes, any png on the internet, etc... The zoom is great, too....I was going to ask for that option. Some of my textures are large and I'd have to resize them (smaller). Thank you @BoltBait and @welshblue ! Happy Belated Valentine's?? 2 Quote My Art Gallery | My Shape Packs | ShapeMaker Mini Tut | Air Bubble Stained Glass Chrome Text with Reflections | Porcelain Text w/ Variegated Coloring | Realistic Knit PatternOpalescent Stained Glass | Frosted Snowman Cookie | Leather Texture | Plastic Text | Silk Embroidery Visit my Personal Website "Never, ever lose your sense of humor - you'll live longer" Link to comment Share on other sites More sharing options...
DrewDale Posted February 17, 2020 Share Posted February 17, 2020 😎 3 Quote Link to comment Share on other sites More sharing options...
HyReZ Posted February 17, 2020 Share Posted February 17, 2020 (edited) @BoltBait @welshblueWelcome improvements on a job already well done. Thank You! I see that @yellowman was able to add rotation and extrusion to his example above. Those features would be a welcome addition to the functionality of this plugin if it was built in! With rotation, zoom and extrusion built in, it would also lend itself to producing frames for animations. I use a product by Magic called Xara 3D Maker 7 that does something similar. Edited February 17, 2020 by HyReZ Quote Link to comment Share on other sites More sharing options...
BoltBait Posted February 17, 2020 Author Share Posted February 17, 2020 29 minutes ago, HyReZ said: I see that @yellowman was able to add rotation and extrusion to his example above. Those features would be a welcome addition to the functionality of this plugin if it was built in! This is the reason for the checkbox at the top of the UI. Create your text before running the plugin. You can rotate it to any angle you want. I could keep adding features forever and the UI would quickly become to tall to use. So, instead, I added some flexibility (object checkbox and clipboard texture) to the UI so that I would not limit creativity. 1 Quote Download: BoltBait's Plugin Pack | CodeLab | and a Free Computer Dominos Game Link to comment Share on other sites More sharing options...
TrevorOutlaw Posted February 17, 2020 Share Posted February 17, 2020 Would it be possible to add tabs to separate the plugin into logical compartments? Quote Link to comment Share on other sites More sharing options...
BoltBait Posted February 17, 2020 Author Share Posted February 17, 2020 The IndirectUI system does not support tabs. Quote Download: BoltBait's Plugin Pack | CodeLab | and a Free Computer Dominos Game Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.