Jump to content
How to Install Plugins ×

Landscape Plugin - With source code (Nov 2, 2009)


BoltBait

Recommended Posts

Tomorrow is my birthday, but today you get the present!

Remember when I wrote the Portrait plugin, MadJik wrote:

MadJik said:

Another good plugin :plugin: ! I like it ! Thanks...

=>joke : ETA for Landscape plugin ?

Well, ETA is TODAY! :D

LandScapeUI2.jpg

LandScapeUI1.jpg

It automates a bunch of steps that I make when fixing landscape pictures. It is obviously not right for everything, but I find it useful. Hopefully you will too.

Download the Landscape.dll as part of my plugin pack here: https://forums.getpaint.net/index.php?/topic/32048-v

If you have trouble installing this plugin, post your troubles here.

Enjoy. B)

For those that are interested in such things, here is the CodeLab source:

// Author: BoltBait
// Submenu: Photo
// Name: Sharpen Landscape
// URL: http://www.BoltBait.com/pdn
#region UICode
Pair<double, double> Amount1 = Pair.Create( 0.0 , -0.25 ); // Position of Horizon
int Amount2 = 50; // [0,100] Sky
int Amount3 = 50; // [0,100] Grass
int Amount4 = 100; // [0,200] Sharpen
int Amount5 = 50; // [0,100] Saturation
int Amount6 = 50; // [0,100] Final Multiply Adjustment
#endregion

// Setup for using the various blend ops
private UserBlendOps.OverlayBlendOp overlayOp = new UserBlendOps.OverlayBlendOp();
private UserBlendOps.ColorDodgeBlendOp dodgeOp = new UserBlendOps.ColorDodgeBlendOp();
private UserBlendOps.MultiplyBlendOp multiplyOp = new UserBlendOps.MultiplyBlendOp();
private UnaryPixelOps.HueSaturationLightness saturationOp;

unsafe void Render(Surface dst, Surface src, Rectangle rect)
{
    Rectangle selection = this.EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt();
    ColorBgra Sky = ColorBgra.FromBgr(255,128,0);
    ColorBgra Grass = ColorBgra.FromBgr(0,128,0);
    int HorizonRow = (int)Math.Round(((Amount1.Second + 1) / 2) * (selection.Bottom - selection.Top));
    saturationOp = new UnaryPixelOps.HueSaturationLightness(0, 100+Amount5*3, 0);

    // Setup for calling the Blur function
    GaussianBlurEffect blurEffect = new GaussianBlurEffect();
    PropertyCollection bProps = blurEffect.CreatePropertyCollection();
    PropertyBasedEffectConfigToken bParameters = new PropertyBasedEffectConfigToken(bProps);
    bParameters.SetPropertyValue(GaussianBlurEffect.PropertyNames.Radius, 1);
    blurEffect.SetRenderInfo(bParameters, new RenderArgs(dst), new RenderArgs(src));
    // Call the Blur function
    blurEffect.Render(new Rectangle[1] {rect},0,1);

    // Now in the main render loop, the dst canvas has a blurred version of the src canvas
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        ColorBgra* srcPtr = src.GetPointAddressUnchecked(rect.Left, y);
        ColorBgra* dstPtr = dst.GetPointAddressUnchecked(rect.Left, y);
        for (int x = rect.Left; x < rect.Right; x++)
        {
            // Create a blue gradient at the top
            if (< HorizonRow) {
                Sky.= (byte)(int)((255.0 - (255.0 * y / HorizonRow ))*(Amount2/100.0));
            } else {
                Sky.= (byte)0;
            }

            // Create a green gradient at the bottom
            if (> HorizonRow) {
                Grass.= (byte)(int)((255.0 * (y-HorizonRow) / (selection.Bottom-HorizonRow))*(Amount3/100.0));
            } else {
                Grass.= (byte)0;
            }

            ColorBgra AdjustmentPixel = *dstPtr;
            ColorBgra SourcePixel = *srcPtr;

            // Sharpen (unsharp mask)
            double NewR = (double)SourcePixel.+ ((double)SourcePixel.- (double)AdjustmentPixel.R) * (double)Amount4 / 100.0;
            double NewG = (double)SourcePixel.+ ((double)SourcePixel.- (double)AdjustmentPixel.G) * (double)Amount4 / 100.0;
            double NewB = (double)SourcePixel.+ ((double)SourcePixel.- (double)AdjustmentPixel.B) * (double)Amount4 / 100.0;
            AdjustmentPixel.= Utility.ClampToByte(NewR);
            AdjustmentPixel.= Utility.ClampToByte(NewG);
            AdjustmentPixel.= Utility.ClampToByte(NewB);

            // Boost the saturation
            *dstPtr = saturationOp.Apply(AdjustmentPixel);

            // Add in the sky and grass
            *dstPtr = multiplyOp.Apply(*dstPtr, Sky);
            *dstPtr = dodgeOp.Apply(*dstPtr, Grass);

            // Finally, add a little "punch" to the overall picture
            AdjustmentPixel = *dstPtr;
            AdjustmentPixel.= (byte)(int)(Amount6 * 255.0 / 100.0);
            *dstPtr = multiplyOp.Apply(*dstPtr, AdjustmentPixel);

            srcPtr++;
            dstPtr++;
        }
    }
} 

Thanks to Tanel for the Sharpen (unsharp mask) code.

  • Upvote 3
Link to comment
Share on other sites

Very interesting!

Suggestions:

Add horizon angle.

Add horizon tube distortion, like MadJiks...

Add horizon line overlay option. To line up horizon settings with image while previewing.

 

Take responsibility for your own intelligence. 😉 -Rick Brewster

Link to comment
Share on other sites

Yeah, I guess that was a little soon for feature requests...

Sorry Boltbait! :(

I do think it is very cool as is!

 

Take responsibility for your own intelligence. 😉 -Rick Brewster

Link to comment
Share on other sites

:shock:

This will be one sweet plugin for some of my photographs! downloads

Ideas are swimming in my heads.

Cheers, BB!

Edit: Have one on me, mate. Beer.gif

Officially retired from this forum. Have a nice day.

Link to comment
Share on other sites

wow thanks boltbait looks sleek and sexy :D

 

"Clearly it's a very serious and literal meaning. If you're not solving physics equations then get off my lawn!-Rick Brewster Paint.net Lead Developer"

Link to comment
Share on other sites

Happy birthday, Santa Claus (you give gifts on your birthday).

yhsjjie.png

History repeats itself, because nobody was paying attention the first time.

Link to comment
Share on other sites

  • 2 months later...

I really like this plugin.

BoltBait is there any way to have a tilt option for the horizon line? sometimes the horizon just isn't smack dab across the screen in straight line.

the work around I've been using is larger canvas and rotating the image then applying plugin then re righting the picture. not absolutlely ideal. but only way I can think to do this. is there another method I'm not thinking of?

ciao OMA

  • Upvote 1
Link to comment
Share on other sites

  • 6 months later...
  • 6 years later...
On 11/2/2009 at 2:26 PM, BoltBait said:

*sigh* no one's ever satisfied

@BoltBait I thank you for posting the code so I can compile it myself (Slowly learning) even though it is the older version - gives me a challenge to correct it as it is now out of date. Another video to watch too. Thank you @ingwer

  • Upvote 1

PaintNetSignature.png.6bca4e07f5d738b2436f83d0ce1b876f.png

Link to comment
Share on other sites

 

In CodeLab:

1. CTRL+I and click on Update (the selected control)

2. Replace the original code:

AdjustmentPixel.R = Utility.ClampToByte(NewR);
AdjustmentPixel.G = Utility.ClampToByte(NewG);
AdjustmentPixel.B = Utility.ClampToByte(NewB);

with

AdjustmentPixel.R = Int32Util.ClampToByte((int)NewR);
AdjustmentPixel.G = Int32Util.ClampToByte((int)NewG);
AdjustmentPixel.B = Int32Util.ClampToByte((int)NewB);

 

  • Upvote 1
Link to comment
Share on other sites

<3 Dear @ingwer

 

:trophy:  Thank you very much for the video and for your effort,  it's helped me. :cake: :coffee: 

 

DSCI0628.png

 

BBsharp.png

 

*PS: The photo belongs to me. 

Edited by Seerose
  • Upvote 2

Live as if you were to die tomorrow. Learn as if you were to live forever.

Gandhi

 

mae3426x.png

Link to comment
Share on other sites

Thank you - Andrew, xod and Seerose!<3

It's just great, dear Seerose to see your immediate result of my little plugin tutorial. It makes me happy :smile:

Edited by ingwer
  • Upvote 1

Signature1.png.079797f32dfc0fc11934054746690174.png

Link to comment
Share on other sites

  • 1 year later...

Since you created CodeLab in the first place, could you teach me how to apply two effects in a plugin? I'm working on a HDR plugin and I'm trying to add a "Brightness/Contrast" effect to it before the "Gaussian Blur" effect - but I seem to get errors. Any tips and help?

Big McThankies From McSpankies!

sakana sig resized.png

Link to comment
Share on other sites

  • 2 years later...

Where can I find the "download " for this landscape -Plugin? I lost all my plug ins when I HAD to upgrade from Windows7 to W10. I could not find the plug in paks I used when I first  Downloaded Paint.net. I am trying to find them all.  Why is everything changing making it a daily hourly search? Any help would be appreciated. Thanks 

Here is one of my Designs. It is Day 6 of the creation, and God has just created the Elephant, the male and his female. I love art work. Paint.net is the Best tool on the market. I really need my Plug -ins.

Cakie67

God Made the Heavens by CAKyer.jpg

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...