【WPF】 画像が削除できない問題

WPFで画像を読み込んだ場合、画像ファイルをアプリケーションが保持してしまい、名前変更・削除等ができなくなります。

「別のプロセスで使用されているため、プロセスはファイルにアクセスできません。」とのメッセージが表示されます。

その場合、サムネイルを作成して表示する方法があります。

''' <summary>
''' 画像パスからサムネイルを作成
''' </summary>
''' <param name="FilePath">画像ファイル</param>
''' <param name="Width">ファイル幅</param>
''' <returns></returns>
Public Shared Function MakeThumbnail(ByVal FilePath As String, Optional ByVal Width As Integer = 0) As BitmapImage
  Try
    'サムネイル画像
    Dim bitmap As BitmapImage = New BitmapImage
    Using fs = New System.IO.FileStream(FilePath, IO.FileMode.Open)
      bitmap.BeginInit()
      bitmap.CacheOption = BitmapCacheOption.None
      bitmap.CacheOption = BitmapCacheOption.OnLoad
      If Width > 0 Then
        bitmap.DecodePixelWidth = Width
      End If
      bitmap.StreamSource = fs
      bitmap.EndInit()
      bitmap.Freeze()
    End Using
    Return bitmap
  Catch ex As Exception
    Return New BitmapImage(New Uri("Resources/errir.png", UriKind.Relative))
  End Try
End Function

使用方法です。

Img.Source = Utils.MakeThumbnail("C:\TEST\Sample.png", 300)

作成した関数を利用してImgタグのSourceプロパティにBitmapImageをセットします。

Share this content: