mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-06-14 02:02:27 +00:00
Add ImageSerializer/Deserializer
This commit is contained in:
@@ -24,7 +24,7 @@ namespace PckStudio.IO.TGA
|
||||
{
|
||||
private static TGAWriter writer = new TGAWriter();
|
||||
|
||||
public static void SerializeToStream(ref Stream stream, Image image)
|
||||
public static void SerializeToStream(Stream stream, Image image)
|
||||
{
|
||||
writer.WriteToStream(stream, image);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ using OMI.Formats.Pck;
|
||||
using OMI.Workers;
|
||||
using PckStudio.Interfaces;
|
||||
using PckStudio.IO.TGA;
|
||||
using PckStudio.Internal.Deserializer;
|
||||
using PckStudio.Internal.Serializer;
|
||||
|
||||
namespace PckStudio.Extensions
|
||||
{
|
||||
@@ -18,8 +20,6 @@ namespace PckStudio.Extensions
|
||||
{
|
||||
private const string MipMap = "MipMapLevel";
|
||||
|
||||
private static Image EmptyImage = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
|
||||
|
||||
internal static Image GetTexture(this PckFileData file)
|
||||
{
|
||||
if (file.Filetype != PckFileType.SkinFile &&
|
||||
@@ -28,23 +28,8 @@ namespace PckStudio.Extensions
|
||||
{
|
||||
throw new Exception("File is not suitable to contain image data.");
|
||||
}
|
||||
using (var stream = new MemoryStream(file.Data))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Path.GetExtension(file.Filename) == ".tga")
|
||||
return TGADeserializer.DeserializeFromStream(stream);
|
||||
else
|
||||
return Image.FromStream(stream);
|
||||
return file.Get(ImageDeserializer.DefaultDeserializer);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Trace.WriteLine($"Failed to read image from pck file data({file.Filename}).", category: nameof(PckFileDataExtensions) + "." + nameof(GetTexture));
|
||||
Debug.WriteLine(ex.Message);
|
||||
return EmptyImage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static T Get<T>(this PckFileData file, IPckDeserializer<T> deserializer)
|
||||
{
|
||||
|
||||
39
PCK-Studio/Internal/Deserializer/ImageDeserializer.cs
Normal file
39
PCK-Studio/Internal/Deserializer/ImageDeserializer.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using OMI.Formats.Pck;
|
||||
using PckStudio.Interfaces;
|
||||
using PckStudio.IO.TGA;
|
||||
|
||||
namespace PckStudio.Internal.Deserializer
|
||||
{
|
||||
internal sealed class ImageDeserializer : IPckDeserializer<Image>
|
||||
{
|
||||
public static readonly ImageDeserializer DefaultDeserializer = new ImageDeserializer();
|
||||
private static Image EmptyImage = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
|
||||
|
||||
public Image Deserialize(PckFileData file)
|
||||
{
|
||||
using var stream = new MemoryStream(file.Data);
|
||||
try
|
||||
{
|
||||
if (Path.GetExtension(file.Filename) == ".tga")
|
||||
return TGADeserializer.DeserializeFromStream(stream);
|
||||
else
|
||||
return Image.FromStream(stream);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.TraceError($"Failed to read image from pck file data({file.Filename}).");
|
||||
Debug.WriteLine(ex.Message);
|
||||
return EmptyImage;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
38
PCK-Studio/Internal/Serializer/ImageSerializer.cs
Normal file
38
PCK-Studio/Internal/Serializer/ImageSerializer.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using OMI.Formats.Pck;
|
||||
using PckStudio.Interfaces;
|
||||
using PckStudio.IO.TGA;
|
||||
|
||||
namespace PckStudio.Internal.Serializer
|
||||
{
|
||||
internal sealed class ImageSerializer : IPckFileSerializer<Image>
|
||||
{
|
||||
public static readonly ImageSerializer DefaultSerializer = new ImageSerializer();
|
||||
|
||||
public void Serialize(Image obj, ref PckFileData file)
|
||||
{
|
||||
var stream = new MemoryStream();
|
||||
try
|
||||
{
|
||||
if (Path.GetExtension(file.Filename) == ".tga")
|
||||
TGASerializer.SerializeToStream(stream, obj);
|
||||
else
|
||||
obj.Save(stream, ImageFormat.Png);
|
||||
file.SetData(stream.ToArray());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.TraceError($"Failed to serialize image to pck file data({file.Filename}).");
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,7 +138,7 @@
|
||||
<Compile Include="Extensions\LocFileExtensions.cs" />
|
||||
<Compile Include="Extensions\PckFileDataExtensions.cs" />
|
||||
<Compile Include="Extensions\TreeNodeExtensions.cs" />
|
||||
<Compile Include="Internal\AnimationSerializer.cs" />
|
||||
<Compile Include="Internal\Deserializer\ImageDeserializer.cs" />
|
||||
<Compile Include="Internal\Serializer\AnimationSerializer.cs" />
|
||||
<Compile Include="Internal\Deserializer\AnimationDeserializer.cs" />
|
||||
<Compile Include="Interfaces\IPckDeserializer.cs" />
|
||||
@@ -148,6 +148,7 @@
|
||||
<Compile Include="Internal\ResourceCategory.cs" />
|
||||
<Compile Include="Internal\CommitInfo.cs" />
|
||||
<Compile Include="Internal\ResourceLocation.cs" />
|
||||
<Compile Include="Internal\Serializer\ImageSerializer.cs" />
|
||||
<Compile Include="Internal\SkinAnimFlag.cs" />
|
||||
<Compile Include="Internal\SkinAnimMask.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
|
||||
Reference in New Issue
Block a user