feat: 支持转换 webp 图片
This commit is contained in:
@@ -96,6 +96,12 @@ Public Class Application
|
|||||||
End If
|
End If
|
||||||
'动态 DLL 调用
|
'动态 DLL 调用
|
||||||
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve
|
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve
|
||||||
|
SetDllDirectory(Path & "PCL\")
|
||||||
|
If Is32BitSystem Then
|
||||||
|
File.WriteAllBytes(Path & "PCL\libwebp.dll", GetResources("libwebp32"))
|
||||||
|
Else
|
||||||
|
File.WriteAllBytes(Path & "PCL\libwebp.dll", GetResources("libwebp64"))
|
||||||
|
End If
|
||||||
'日志初始化
|
'日志初始化
|
||||||
LogStart()
|
LogStart()
|
||||||
'添加日志
|
'添加日志
|
||||||
@@ -171,9 +177,11 @@ Public Class Application
|
|||||||
Private Shared AssemblyNAudio As Assembly
|
Private Shared AssemblyNAudio As Assembly
|
||||||
Private Shared AssemblyJson As Assembly
|
Private Shared AssemblyJson As Assembly
|
||||||
Private Shared AssemblyDialog As Assembly
|
Private Shared AssemblyDialog As Assembly
|
||||||
|
Private Shared AssemblyWebp As Assembly
|
||||||
Private Shared ReadOnly AssemblyNAudioLock As New Object
|
Private Shared ReadOnly AssemblyNAudioLock As New Object
|
||||||
Private Shared ReadOnly AssemblyJsonLock As New Object
|
Private Shared ReadOnly AssemblyJsonLock As New Object
|
||||||
Private Shared ReadOnly AssemblyDialogLock As New Object
|
Private Shared ReadOnly AssemblyDialogLock As New Object
|
||||||
|
Private Shared ReadOnly AssemblyWebpLock As New Object
|
||||||
Public Shared Function AssemblyResolve(sender As Object, args As ResolveEventArgs) As Assembly
|
Public Shared Function AssemblyResolve(sender As Object, args As ResolveEventArgs) As Assembly
|
||||||
If args.Name.StartsWithF("NAudio") Then
|
If args.Name.StartsWithF("NAudio") Then
|
||||||
SyncLock AssemblyNAudioLock
|
SyncLock AssemblyNAudioLock
|
||||||
@@ -199,6 +207,14 @@ Public Class Application
|
|||||||
End If
|
End If
|
||||||
Return AssemblyDialog
|
Return AssemblyDialog
|
||||||
End SyncLock
|
End SyncLock
|
||||||
|
ElseIf args.Name.StartsWithF("Imazen.WebP") Then
|
||||||
|
SyncLock AssemblyWebpLock
|
||||||
|
If AssemblyWebp Is Nothing Then
|
||||||
|
Log("[Start] 加载 DLL:Imazen.WebP")
|
||||||
|
AssemblyWebp = Assembly.Load(GetResources("WebP"))
|
||||||
|
End If
|
||||||
|
Return AssemblyWebp
|
||||||
|
End SyncLock
|
||||||
Else
|
Else
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -18,9 +18,6 @@
|
|||||||
'网络图片
|
'网络图片
|
||||||
If File.Exists(FileAddress) Then
|
If File.Exists(FileAddress) Then
|
||||||
PathLogo.Source = New MyBitmap(FileAddress)
|
PathLogo.Source = New MyBitmap(FileAddress)
|
||||||
ElseIf _Logo.EndsWithF(".webp", True) Then 'Modrinth 林业 Mod 使用了不支持的 WebP 格式 Logo
|
|
||||||
Log($"[Comp] 发现不支持的 WebP 格式图标,已更改为默认图标:{_Logo}")
|
|
||||||
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
|
|
||||||
Else
|
Else
|
||||||
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
|
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
|
||||||
RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
|
RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
|
||||||
@@ -58,6 +55,12 @@ RetryStart:
|
|||||||
End If
|
End If
|
||||||
'下载图片
|
'下载图片
|
||||||
NetDownload(Url, LocalFileAddress & DownloadEnd, True)
|
NetDownload(Url, LocalFileAddress & DownloadEnd, True)
|
||||||
|
If Url.EndsWithF("webp") Then
|
||||||
|
Log($"[Comp] Webp 格式转换:{LocalFileAddress}")
|
||||||
|
Dim dec = New Imazen.WebP.SimpleDecoder()
|
||||||
|
Dim picFile = File.ReadAllBytes(LocalFileAddress & DownloadEnd)
|
||||||
|
dec.DecodeFromBytes(picFile, picFile.Length).Save(LocalFileAddress & DownloadEnd)
|
||||||
|
End If
|
||||||
Dim LoadError As Exception = Nothing
|
Dim LoadError As Exception = Nothing
|
||||||
RunInUiWait(
|
RunInUiWait(
|
||||||
Sub()
|
Sub()
|
||||||
|
|||||||
@@ -20,9 +20,6 @@ Public Class MyLocalModItem
|
|||||||
'网络图片
|
'网络图片
|
||||||
If File.Exists(FileAddress) Then
|
If File.Exists(FileAddress) Then
|
||||||
PathLogo.Source = New MyBitmap(FileAddress)
|
PathLogo.Source = New MyBitmap(FileAddress)
|
||||||
ElseIf _Logo.EndsWithF(".webp", True) Then 'Modrinth 林业 Mod 使用了不支持的 WebP 格式 Logo
|
|
||||||
Log($"[LocalModItem] 发现不支持的 WebP 格式图标,已更改为默认图标:{_Logo}")
|
|
||||||
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
|
|
||||||
Else
|
Else
|
||||||
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
|
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
|
||||||
RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
|
RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
|
||||||
@@ -60,6 +57,12 @@ RetryStart:
|
|||||||
End If
|
End If
|
||||||
'下载图片
|
'下载图片
|
||||||
NetDownload(Url, LocalFileAddress & DownloadEnd, True)
|
NetDownload(Url, LocalFileAddress & DownloadEnd, True)
|
||||||
|
If Url.EndsWithF("webp") Then
|
||||||
|
Log($"[Comp] Webp 格式转换:{LocalFileAddress}")
|
||||||
|
Dim dec = New Imazen.WebP.SimpleDecoder()
|
||||||
|
Dim picFile = File.ReadAllBytes(LocalFileAddress & DownloadEnd)
|
||||||
|
dec.DecodeFromBytes(picFile, picFile.Length).Save(LocalFileAddress & DownloadEnd)
|
||||||
|
End If
|
||||||
Dim LoadError As Exception = Nothing
|
Dim LoadError As Exception = Nothing
|
||||||
RunInUiWait(
|
RunInUiWait(
|
||||||
Sub()
|
Sub()
|
||||||
|
|||||||
@@ -798,6 +798,8 @@ NextFile:
|
|||||||
Public Declare Function SetForegroundWindow Lib "user32" (hWnd As IntPtr) As Integer
|
Public Declare Function SetForegroundWindow Lib "user32" (hWnd As IntPtr) As Integer
|
||||||
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (hWnd As IntPtr, msg As UInteger, wParam As Long, lParam As Long) As Boolean
|
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (hWnd As IntPtr, msg As UInteger, wParam As Long, lParam As Long) As Boolean
|
||||||
|
|
||||||
|
Public Declare Function SetDllDirectory Lib "kernel32" Alias "SetDllDirectoryA" (lpPathName As String) As Boolean
|
||||||
|
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
Public DragControl = Nothing
|
Public DragControl = Nothing
|
||||||
|
|||||||
@@ -120,6 +120,26 @@ Namespace My.Resources
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' 查找 System.Byte[] 类型的本地化资源。
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property libwebp32() As Byte()
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("libwebp32", resourceCulture)
|
||||||
|
Return CType(obj,Byte())
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' 查找 System.Byte[] 类型的本地化资源。
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property libwebp64() As Byte()
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("libwebp64", resourceCulture)
|
||||||
|
Return CType(obj,Byte())
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
'''<summary>
|
'''<summary>
|
||||||
''' 查找 System.Byte[] 类型的本地化资源。
|
''' 查找 System.Byte[] 类型的本地化资源。
|
||||||
'''</summary>
|
'''</summary>
|
||||||
@@ -149,5 +169,15 @@ Namespace My.Resources
|
|||||||
Return CType(obj,Byte())
|
Return CType(obj,Byte())
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' 查找 System.Byte[] 类型的本地化资源。
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property WebP() As Byte()
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("WebP", resourceCulture)
|
||||||
|
Return CType(obj,Byte())
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@@ -136,6 +136,12 @@
|
|||||||
<data name="Json" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="Json" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\Newtonsoft.Json.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>..\Resources\Newtonsoft.Json.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="libwebp32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\libwebp32.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="libwebp64" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\libwebp64.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
<data name="ModData" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="ModData" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\ModData.txt;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>..\Resources\ModData.txt;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -145,4 +151,7 @@
|
|||||||
<data name="Transformer" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="Transformer" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\transformer.jar;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>..\Resources\transformer.jar;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="WebP" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\Imazen.WebP.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -140,6 +140,10 @@
|
|||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Imazen.WebP, Version=10.0.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>Resources\Imazen.WebP.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
@@ -185,9 +189,6 @@
|
|||||||
<Compile Include="Controls\MyIconTextButton.xaml.vb">
|
<Compile Include="Controls\MyIconTextButton.xaml.vb">
|
||||||
<DependentUpon>MyIconTextButton.xaml</DependentUpon>
|
<DependentUpon>MyIconTextButton.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Compile Include="Modules\Minecraft\ModComp.vb" />
|
<Compile Include="Modules\Minecraft\ModComp.vb" />
|
||||||
<Compile Include="Modules\Minecraft\ModJava.vb" />
|
<Compile Include="Modules\Minecraft\ModJava.vb" />
|
||||||
<Compile Include="Modules\Minecraft\ModMod.vb" />
|
<Compile Include="Modules\Minecraft\ModMod.vb" />
|
||||||
@@ -472,7 +473,6 @@
|
|||||||
<DependentUpon>FormMain.xaml</DependentUpon>
|
<DependentUpon>FormMain.xaml</DependentUpon>
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
||||||
<Page Include="Modules\Minecraft\MyLocalModItem.xaml">
|
<Page Include="Modules\Minecraft\MyLocalModItem.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@@ -927,7 +927,9 @@
|
|||||||
<Resource Include="Images\Heads\MCBBS.png" />
|
<Resource Include="Images\Heads\MCBBS.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Content Include="Resources\Imazen.WebP.dll" />
|
||||||
|
<Content Include="Resources\libwebp32.dll" />
|
||||||
|
<Content Include="Resources\libwebp64.dll" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Images\Blocks\NeoForge.png" />
|
<Resource Include="Images\Blocks\NeoForge.png" />
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user