Строка рисования на изображении и сохранение с тем же именем С#

Я работаю над проектом, в котором мне нужно рисовать текст из внешнего интерфейса, используя fabric.js. У меня есть код для отправки json для строки рисования, т.е. canvas.tojson().

На стороне сервера у меня проблема в С#. Я должен сохранить изображение с тем же именем файла. Если я пытаюсь удалить исходный файл перед сохранением, он говорит, что файл уже используется другой программой, и если я перезаписываю его, он тоже этого не делает. Как я могу сохранить файл с тем же именем после рисования изображения?

Вот мой код

string file = "D:\\Folder\\file.jpg";
            Bitmap bitMapImage = new Bitmap(file);
            Graphics graphicImage = Graphics.FromImage(bitMapImage);
            graphicImage.SmoothingMode = SmoothingMode.AntiAlias;
            graphicImage.DrawString("That's my boy!",new Font("Arial", 12, FontStyle.Bold),SystemBrushes.WindowText, new Point(100, 250));
            graphicImage.DrawArc(new Pen(Color.Red, 3), 90, 235, 150, 50, 0, 360);

            System.IO.File.Delete(file);

            bitMapImage.Save(file, ImageFormat.Jpeg); 

person skhurams    schedule 25.11.2016    source источник
comment
Также см. здесь   -  person TaW    schedule 25.11.2016


Ответы (2)


Просто клонируйте исходное растровое изображение и избавьтесь от оригинала, чтобы он освободил файл...

Bitmap cloneImage = null;
using (Bitmap bitMapImage = new Bitmap(file))
{
    cloneImage = new Bitmap(bitMapImage);
}


using (cloneImage)
{
    Graphics graphicImage = Graphics.FromImage(cloneImage);
    graphicImage.SmoothingMode = SmoothingMode.AntiAlias;
    graphicImage.DrawString("That's my boy!", new Font("Arial", 12, FontStyle.Bold), SystemBrushes.WindowText, new Point(100, 250));
    graphicImage.DrawArc(new Pen(Color.Red, 3), 90, 235, 150, 50, 0, 360);

    System.IO.File.Delete(file);

    cloneImage.Save(file, ImageFormat.Jpeg);
}
person L.B    schedule 25.11.2016

Ссылаясь на этот ответ, вы можете получить растровое изображение из файлового потока и утилизируйте его перед сменой изображения:

        Bitmap bitMapImage;
        using (var fs = new System.IO.FileStream(file, System.IO.FileMode.Open))
        {
            bitMapImage = new Bitmap(fs);
        }

        Graphics graphicImage = Graphics.FromImage(bitMapImage);
        graphicImage.SmoothingMode = SmoothingMode.AntiAlias;
        graphicImage.DrawString("That's my boy!",new Font("Arial", 12, FontStyle.Bold),SystemBrushes.WindowText, new Point(100, 250));
        graphicImage.DrawArc(new Pen(Color.Red, 3), 90, 235, 150, 50, 0, 360);           

        bitMapImage.Save(file, ImageFormat.Jpeg); 
person KMoussa    schedule 25.11.2016