Tyler Miles
Tyler Miles

Reputation: 15

How to load an image and access it from everywhere?

I would like to browse an image from form window. Also I created a class and created some filters. I can read this image from form.

My goal is declare it in my class. And use this image in everywhere. But I don't know how can I do this.

private void btn_BROWSE_Click(object sender, EventArgs e)
{
    OpenFileDialog imge = new OpenFileDialog(); 
    imge.Filter = "Extensions |*.bmp;*.jpg;*.jpeg;*.png;*.tif;*.tiff|"
                  + "BMP|*.bmp|GIF|*.gif|JPG|*.jpg;*.jpeg|PNG|*.png|TIFF|*.tif;*.tiff|"
                  + "Zip Files|*.zip;*.rar";
    imge.ShowDialog(); 
    string imgepath = imge.FileName;
    pBox_SOURCE.ImageLocation = imgepath;//i'm browsing an image
}
private void sliderKernel_MouseUp(object sender, MouseEventArgs e)
{
    Bitmap OriginalImage = new Bitmap(pBox_SOURCE.Image);
} 
class Filters
{ 
    // (i would like to initialize my image in here not in form :) ) 
}

Upvotes: 0

Views: 152

Answers (2)

Omar
Omar

Reputation: 48

I think you should turn the image into a byte array

using the following code and store it in a static class

public byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
   using (var ms = new MemoryStream())
   {
      imageIn.Save(ms,imageIn.RawFormat);
      return  ms.ToArray();
   }
}

https://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv

And use this code to turn into a graphic to display in pictureBox

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}

Upvotes: 0

aperezfals
aperezfals

Reputation: 1389

I would define an abstract class Filter and implement every filter as an heir of that class.

public abstract class Filter
{   
    public Bitmap Image { get; set; }

    public abstract void Apply();
}

An implementation would be:

public class SliderKernel : Filter
{   
    public overrides void Apply()
    {
        //manipulates the Image property
    }
}

If you want to use that image everywhere you should declare it as a static member of a class:

public static class ImageContainer
{
     public static Bitmap Image { get; set; }
}

You can use all this in your form code like this:

private void btn_BROWSE_Click(object sender, EventArgs e)
{
    OpenFileDialog imge = new OpenFileDialog(); 
    imge.Filter = "Extensions |*.bmp;*.jpg;*.jpeg;*.png;*.tif;*.tiff|"
                  + "BMP|*.bmp|GIF|*.gif|JPG|*.jpg;*.jpeg|PNG|*.png|TIFF|*.tif;*.tiff|"
                  + "Zip Files|*.zip;*.rar";
    imge.ShowDialog(); 
    string imgepath = imge.FileName;
    pBox_SOURCE.ImageLocation = imgepath;//i'm browsing an image

    //save the image to the container
    ImageContainer.Image = new Bitmap(pBox_SOURCE.Image);
}

private void sliderKernel_MouseUp(object sender, MouseEventArgs e)
{
    Filter filter = new SliderKernel () { Image = ImageContainer.Image };
    filter.Apply();
} 

Upvotes: 1

Related Questions