From 94476384bd4767a4a9c42ea5cc22f3648bc4bc41 Mon Sep 17 00:00:00 2001 From: tangge233 Date: Tue, 1 Oct 2024 23:12:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20MyImage=20=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plain Craft Launcher 2/Controls/MyImage.xaml | 7 ++++ .../Controls/MyImage.xaml.vb | 32 ++++++++++++++++ .../Modules/Base/MyBitmap.vb | 37 +++++++++++-------- .../Pages/PageLaunch/PageLaunchRight.xaml | 1 + .../Plain Craft Launcher 2.vbproj | 12 +++--- 5 files changed, 68 insertions(+), 21 deletions(-) create mode 100644 Plain Craft Launcher 2/Controls/MyImage.xaml create mode 100644 Plain Craft Launcher 2/Controls/MyImage.xaml.vb diff --git a/Plain Craft Launcher 2/Controls/MyImage.xaml b/Plain Craft Launcher 2/Controls/MyImage.xaml new file mode 100644 index 0000000..b0fa06a --- /dev/null +++ b/Plain Craft Launcher 2/Controls/MyImage.xaml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/Plain Craft Launcher 2/Controls/MyImage.xaml.vb b/Plain Craft Launcher 2/Controls/MyImage.xaml.vb new file mode 100644 index 0000000..9f4d934 --- /dev/null +++ b/Plain Craft Launcher 2/Controls/MyImage.xaml.vb @@ -0,0 +1,32 @@ +Public Class MyImage + + '自定义属性 + Public Uuid As Integer = GetUuid() + Private _Uri As String = "" + + Public Property Source As String + Get + Return _Uri + End Get + Set(value As String) + _Uri = value + RefreshImage() + End Set + End Property '显示文本 + Public Shared ReadOnly SourceProperty As DependencyProperty = DependencyProperty.Register("Source", GetType(String), GetType(MyImage), New PropertyMetadata(New PropertyChangedCallback( + Sub(sender As DependencyObject, e As DependencyPropertyChangedEventArgs) + If Not IsNothing(sender) Then + CType(sender, MyImage)._Uri = e.NewValue.ToString() + CType(sender, MyImage).RefreshImage() + End If + End Sub))) + + Public Sub RefreshImage() + If Me Is Nothing Then Exit Sub + Try + PanContent.Source = New MyBitmap(_Uri.ToString()) + Catch ex As Exception + Log(ex, "刷新图片内容失败") + End Try + End Sub +End Class diff --git a/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb b/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb index e60d27a..8a0277a 100644 --- a/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb +++ b/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb @@ -64,24 +64,29 @@ Public Class MyBitmap BitmapCache.Add(FilePathOrResourceName, Pic) End If Else + Dim tempFile = PathTemp & "Cache\MyImage\" & GetHash(FilePathOrResourceName) + If FilePathOrResourceName.StartsWith("http") Then + NetDownload(FilePathOrResourceName, tempFile, True) + FilePathOrResourceName = tempFile + End If '使用这种自己接管 FileStream 的方法加载才能解除文件占用 Using InputStream As New FileStream(FilePathOrResourceName, FileMode.Open) - '判断是否为 WebP 文件头 - Dim Header(1) As Byte - InputStream.Read(Header, 0, 2) - InputStream.Seek(0, SeekOrigin.Begin) - If Header(0) = 82 AndAlso Header(1) = 73 Then - '读取 WebP - If Is32BitSystem Then Throw New Exception("不支持在 32 位系统下加载 WebP 图片。") - Dim FileBytes(InputStream.Length - 1) As Byte - InputStream.Read(FileBytes, 0, FileBytes.Length) - Dim Decoder As New Imazen.WebP.SimpleDecoder() - Pic = Decoder.DecodeFromBytes(FileBytes, FileBytes.Length) - Else - Pic = New System.Drawing.Bitmap(InputStream) - End If - End Using - End If + '判断是否为 WebP 文件头 + Dim Header(1) As Byte + InputStream.Read(Header, 0, 2) + InputStream.Seek(0, SeekOrigin.Begin) + If Header(0) = 82 AndAlso Header(1) = 73 Then + '读取 WebP + If Is32BitSystem Then Throw New Exception("不支持在 32 位系统下加载 WebP 图片。") + Dim FileBytes(InputStream.Length - 1) As Byte + InputStream.Read(FileBytes, 0, FileBytes.Length) + Dim Decoder As New Imazen.WebP.SimpleDecoder() + Pic = Decoder.DecodeFromBytes(FileBytes, FileBytes.Length) + Else + Pic = New System.Drawing.Bitmap(InputStream) + End If + End Using + End If Catch ex As Exception Pic = My.Application.TryFindResource(FilePathOrResourceName) If Pic Is Nothing Then diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml index 1cc6a70..7164262 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml +++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml @@ -8,6 +8,7 @@ + Designer + + MyImage.xaml + @@ -191,9 +194,6 @@ MyIconTextButton.xaml - - - @@ -381,6 +381,10 @@ PageSpeedRight.xaml + + MSBuild:Compile + Designer + Designer MSBuild:Compile @@ -478,7 +482,6 @@ FormMain.xaml Code - MSBuild:Compile Designer @@ -913,7 +916,6 @@ -