Выпуск растрового изображения из системной памяти, чтобы удалить его C # - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сравнить два изображения и удалить второе, если это одно и то же изображение.Когда моя программа удаляет файл, она выдает ошибку: The process cannot access the file "C:\Temp\Image.jpg" because it is being used by another process

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

    public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
    {
        MemoryStream ms = new MemoryStream();
        firstImage.Save(ms, ImageFormat.Png);
        string firstBitmap = Convert.ToBase64String(ms.ToArray());
        ms.Position = 0;

        secondImage.Save(ms, ImageFormat.Png);
        string secondBitmap = Convert.ToBase64String(ms.ToArray());

        if (firstBitmap.Equals(secondBitmap))
        {
            ms.Close();
            return true;
        }
        else 
        {
            ms.Close();
            return false;
        }
    }

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я бы рекомендовал использовать try cach и run dispose для освобождения ресурсов в разделе finnaly. Это удалит объект, даже если было сгенерировано исключение:

    public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
{
    try
    {
        MemoryStream ms = new MemoryStream();
        firstImage.Save(ms, ImageFormat.Png);
        string firstBitmap = Convert.ToBase64String(ms.ToArray());
        ms.Position = 0;

        secondImage.Save(ms, ImageFormat.Png);
        string secondBitmap = Convert.ToBase64String(ms.ToArray());

        if (firstBitmap.Equals(secondBitmap))
        {
            return true;
        }
        else 
        {           
            return false;
        }
    } 
    catch(Exception ex)
    {
        //log it, display or whatever
    } 
    finnaly 
    {
        ms.Close();
        ms.Dispose();
    }

}
0 голосов
/ 14 ноября 2018

Удалите растровое изображение второго изображения перед удалением фактического файла.Так что-то вроде 'secondImage.Dispose ()'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...