This has been a known issue for about two decades. You can read the file into an array of bytes, wrap that in a MemoryStream, then create the Bitmap from the stream. That will avoid locking the file for the life of the Bitmap.
From memory and untested:
public Bitmap GetBitmapFromFile(string filepath)
{
byte[] buffer = File.ReadAllBytes(filepath);
using (MemoryStream ms = new MemoryStream(buffer))
{
Bitmap bitmap = Image.FromStream(ms);
return img;
}
}