diff --git a/CUE4Parse b/CUE4Parse index 6399d6a7..9b8b311b 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 6399d6a7c7b5cb07e2ebfee1687d56880d494aef +Subproject commit 9b8b311b7b253b4f54260e819596910c80008240 diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 705eacba..8a2c6140 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -6,6 +6,7 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows; +using System.Windows.Media; using System.Windows.Media.Imaging; using AdonisUI.Controls; using CUE4Parse.Encryption.Aes; @@ -19,6 +20,7 @@ using CUE4Parse.UE4.Assets.Exports.Sound; using CUE4Parse.UE4.Assets.Exports.Texture; using CUE4Parse.UE4.Assets.Exports.Wwise; using CUE4Parse.UE4.Localization; +using CUE4Parse.UE4.Objects.UObject; using CUE4Parse.UE4.Oodle.Objects; using CUE4Parse.UE4.Wwise; using CUE4Parse_Conversion.Materials; @@ -540,7 +542,13 @@ namespace FModel.ViewModels { case UTexture2D texture: { - SetImage(texture.Decode()); + var bNearest = false; + if (texture.TryGetValue(out FName trigger, "LODGroup", "Filter") && !trigger.IsNone) + bNearest = trigger.Text.EndsWith("TEXTUREGROUP_Pixels2D", StringComparison.OrdinalIgnoreCase) || + trigger.Text.EndsWith("TF_Nearest", StringComparison.OrdinalIgnoreCase); + + TabControl.SelectedTab.ImageRender = bNearest ? BitmapScalingMode.NearestNeighbor : BitmapScalingMode.Linear; + SetImage(texture.Decode(bNearest)); return true; } case UAkMediaAssetData: diff --git a/FModel/ViewModels/Commands/ImageCommand.cs b/FModel/ViewModels/Commands/ImageCommand.cs index 18b8c38d..59d7a5e7 100644 --- a/FModel/ViewModels/Commands/ImageCommand.cs +++ b/FModel/ViewModels/Commands/ImageCommand.cs @@ -1,4 +1,5 @@ using System.Windows; +using System.Windows.Media; using AdonisUI.Controls; using FModel.Framework; using FModel.Views.Resources.Controls; @@ -21,14 +22,16 @@ namespace FModel.ViewModels.Commands { Helper.OpenWindow(contextViewModel.Header + " (Image)", () => { - new ImagePopout + var popout = new ImagePopout { Title = contextViewModel.Header + " (Image)", Width = contextViewModel.Image.Width, Height = contextViewModel.Image.Height, WindowState = contextViewModel.Image.Height > 1000 ? WindowState.Maximized : WindowState.Normal, ImageCtrl = {Source = contextViewModel.Image} - }.Show(); + }; + RenderOptions.SetBitmapScalingMode(popout.ImageCtrl, contextViewModel.ImageRender); + popout.Show(); }); break; } diff --git a/FModel/ViewModels/TabControlViewModel.cs b/FModel/ViewModels/TabControlViewModel.cs index 0b07f22c..458bec22 100644 --- a/FModel/ViewModels/TabControlViewModel.cs +++ b/FModel/ViewModels/TabControlViewModel.cs @@ -5,6 +5,7 @@ using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Windows; +using System.Windows.Media; using System.Windows.Media.Imaging; using FModel.Extensions; using FModel.Settings; @@ -125,6 +126,13 @@ namespace FModel.ViewModels } } + private BitmapScalingMode _imageRender = BitmapScalingMode.Linear; + public BitmapScalingMode ImageRender + { + get => _imageRender; + set => SetProperty(ref _imageRender, value); + } + public bool HasImage => Image != null; public bool ShouldScroll => !string.IsNullOrEmpty(ScrollTrigger); diff --git a/FModel/Views/Resources/Resources.xaml b/FModel/Views/Resources/Resources.xaml index 95653e2a..387a134c 100644 --- a/FModel/Views/Resources/Resources.xaml +++ b/FModel/Views/Resources/Resources.xaml @@ -647,7 +647,7 @@ + Source="{Binding SelectedItem.Image, ElementName=TabControlName}" RenderOptions.BitmapScalingMode="{Binding SelectedItem.ImageRender, ElementName=TabControlName}">