Yeah, it's possible.
You can store files in a Dll or Executable by setting it as am embeded resource. So add the file to your project and then click on it in visual studio and change it's Build Action in the properties pane from "Content" to "Embeded Resource"
When you compile the program, this will cause the file to be included in the Executable or Dll's Resource sections in the binary.
In your code you can access embeded resources via the Assembly class in the System.Reflection namespace. The method is called "GetManifestResourceStream" and it's an instanced method. So you need to get a reference to the Assembly your embeded resource is in. If it's in the current executable just use System.Reflection.Assembly.GetEntryAssembly().
The GetManifestResourceStream method accepts a name for the name of the Embeded Resource. The name is determined by the namespace of the file you added as an embeded resource. So if you put the file in the root of the project then it will be whatever the projects default namespace is plus the name of the file.
So let's say you added "trees.png" and you put it in a folder called "Images" in the root of your Project. Now let's say the projects root namespace is XYZ.ImageEditor. So the name of the embedded resource to give to GetManifestResourceStream would be "XYZ.ImageEditor.Images.trees.png".
There is also a method called GetManifestResourceNames() that will return a list of all resource names embedded in the assembly, so the full name of trees.png would be returned in this list. You can use that to enumerate files embedded in the Assembly.
Once you have the resource stream you can write it to a file with System.IO.File.WriteAllText or System.IO.File.WriteAllBinary, etc etc. Or open a file stream manually and write to it from Bytes read from the resource stream. Lots of different ways to go about doing this part.