I wanna create a pdf with 2 images. One of the image is a text and the other is a watermark to draw on top of the first one. Well when I load the first image everything is ok but then I try to load the watermark image and get the "Out of Memory" exception. I've got memory (printed the memory usage was like 20MB) and can open the image in my computer (I'm using one I took from google just to test until I don't get the real one).
The code where I get the exception is this one:
using (System.Drawing.Image imgOriginal = System.Drawing.Image.FromFile(sOriginalPath, true))
{
using (System.Drawing.Image imgLogo = System.Drawing.Image.FromFile(sLogoPath, true)) //This is where it throws the exception
{
using (Graphics gra = Graphics.FromImage(imgOriginal))
{
Bitmap bmLogo = new Bitmap(imgLogo);
int nWidth = bmLogo.Size.Width;
int nHeight = bmLogo.Size.Height;
int nLeft = (imgOriginal.Width / 2) - (nWidth / 2);
int nTop = (imgOriginal.Height / 2) - (nHeight / 2);
gra.DrawImage(bmLogo, nLeft, nTop, nWidth, nHeight);
}
return imgOriginal;
}
}
I've seen the other questions like mine but:
- It doesn't seem memory problem
- It doesn't seem image problem
Can you help me? Thanks :)
Well I found out that in previous functions of the program a file was being created in the exact same path as the watermark image and so when I tried to open it up as a image it gave me an error.
After solving this problem I notice my code had another problem, my imgOriginal was being returned but because I was using the
the object was being disposed and so I was loosing my image. To solve this I updated my function to this:
first convert Byte[] format after that conver base64 format try below code may its solve your problem,
Issue
You are building an object
Then you are returning it...but it is already disposed of...you need to not dispose of the object by unwrapping it with a using...whatever consumes this will need to dispose of the object.
Other Issue
bitmap
is also a memory leak and needs to be wrapped with ausing
ordispose
called implicitly.Final Function Example
Example Console App Demo
I've tested the below and it worked as expected.