From 5051cd58be27edd1c6f9edf6048808efdae36a08 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 14 Aug 2023 17:19:59 +0200 Subject: [PATCH] PckFileDataExtensions - Added GetTexture extension --- .../Extensions/PckFileDataExtensions.cs | 25 ++++++++++++++++++- PCK-Studio/Forms/Editor/AnimationEditor.cs | 3 +-- PCK-Studio/MainForm.cs | 13 +++------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/PCK-Studio/Extensions/PckFileDataExtensions.cs b/PCK-Studio/Extensions/PckFileDataExtensions.cs index c45d5a5e..c781b3a5 100644 --- a/PCK-Studio/Extensions/PckFileDataExtensions.cs +++ b/PCK-Studio/Extensions/PckFileDataExtensions.cs @@ -16,6 +16,29 @@ namespace PckStudio.Extensions { private const string MipMap = "MipMapLevel"; + internal static Image GetTexture(this PckFile.FileData file) + { + if (file.Filetype != PckFile.FileData.FileType.SkinFile && + file.Filetype != PckFile.FileData.FileType.CapeFile && + file.Filetype != PckFile.FileData.FileType.TextureFile) + { + return null; + } + Image image = null; + using (var stream = new MemoryStream(file.Data)) + { + try + { + image = Image.FromStream(stream); + } + catch(Exception ex) + { + Debug.WriteLine(ex.Message); + } + } + return image; + } + internal static void SetData(this PckFile.FileData file, IDataFormatWriter writer) { using (var stream = new MemoryStream()) @@ -31,7 +54,7 @@ namespace PckStudio.Extensions file.Filetype != PckFile.FileData.FileType.CapeFile && file.Filetype != PckFile.FileData.FileType.TextureFile) { - Debug.WriteLine($"{file.Filename} is can't contain image data"); + Debug.WriteLine($"{file.Filename} can't contain image data"); return; } diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index ef48e0b2..91c6025d 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -80,8 +80,7 @@ namespace PckStudio.Forms.Editor currentAnimation = new Animation(Array.Empty()); if (animationFile is not null && animationFile.Size > 0) { - using MemoryStream textureMem = new MemoryStream(animationFile.Data); - var texture = new Bitmap(textureMem); + var texture = animationFile.GetTexture(); var frameTextures = texture.Split(ImageLayoutDirection.Vertical); currentAnimation = animationFile.Properties.HasProperty("ANIM") ? new Animation(frameTextures, animationFile.Properties.GetPropertyValue("ANIM")) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 015a8c09..6fe8a1c0 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -370,9 +370,7 @@ namespace PckStudio if (file.Filename == "res/terrain.png" || file.Filename == "res/items.png") { - using var ms = new MemoryStream(file.Data); - - var img = Image.FromStream(ms); + var img = file.GetTexture(); var res = img.Width / 16; // texture count on X axes var size = new Size(res, res); var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, size); @@ -395,7 +393,6 @@ namespace PckStudio BuildMainTreeView(); } } - return; } } @@ -439,14 +436,10 @@ namespace PckStudio return; } - using(var ms = new MemoryStream(file.Data)) - { - var img = Image.FromStream(ms); - var skinViewer = new SkinPreview(img, file.Properties.GetPropertyValue("ANIM", SkinANIM.FromString)); + var img = file.GetTexture(); + using var skinViewer = new SkinPreview(img, file.Properties.GetPropertyValue("ANIM", SkinANIM.FromString)); skinViewer.ShowDialog(this); - skinViewer.Dispose(); } - } public void HandleModelsFile(PckFile.FileData file) {