diff --git a/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs b/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs index e7c1b90b..bf58e830 100644 --- a/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs +++ b/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs @@ -1,6 +1,6 @@ /* * Copyright (c) 2006-2016, openmetaverse.co - * Copyright (c) 2021-2022, Sjofn LLC. + * Copyright (c) 2021-2024, Sjofn LLC. * All rights reserved. * * - Redistribution and use in source and binary forms, with or without @@ -25,7 +25,9 @@ * POSSIBILITY OF SUCH DAMAGE. */ +using CSJ2K; using OpenMetaverse.Imaging; +using SkiaSharp; namespace OpenMetaverse.Assets { @@ -77,10 +79,8 @@ namespace OpenMetaverse.Assets /// public sealed override void Encode() { - using (var writer = new OpenJpegDotNet.IO.Writer(Image.ExportBitmap())) - { - AssetData = writer.Encode(); - } + var bitmap = Image.ExportBitmap(); + AssetData = J2kImage.ToBytes(J2kImage.CreateEncodableSource(bitmap)); } /// @@ -94,12 +94,8 @@ namespace OpenMetaverse.Assets this.Components = 0; - using (var reader = new OpenJpegDotNet.IO.Reader(AssetData)) - { - // *hack: decode from ManagedImage directly or better yet, get rid of ManagedImage entirely! - if (!reader.ReadHeader()) { return false; } - Image = new ManagedImage(reader.DecodeToBitmap()); - } + var image = J2kImage.FromBytes(AssetData); + Image = new ManagedImage(image.As()); if ((Image.Channels & ManagedImage.ImageChannels.Color) != 0) Components += 3; diff --git a/LibreMetaverse/ImportExport/ColladalLoader.cs b/LibreMetaverse/ImportExport/ColladalLoader.cs index 90c876c9..1664b220 100644 --- a/LibreMetaverse/ImportExport/ColladalLoader.cs +++ b/LibreMetaverse/ImportExport/ColladalLoader.cs @@ -33,9 +33,9 @@ using System.IO; using System.Xml; using System.Linq; using System.Xml.Serialization; +using CSJ2K; using OpenMetaverse.ImportExport.Collada14; using OpenMetaverse.Rendering; -using Pfim; using SkiaSharp; namespace OpenMetaverse.ImportExport @@ -161,10 +161,7 @@ namespace OpenMetaverse.ImportExport bitmap = SKBitmap.FromImage(scaledImage); } - using (var writer = new OpenJpegDotNet.IO.Writer(bitmap)) - { - material.TextureData = writer.Encode(); - } + material.TextureData = J2kImage.ToBytes(J2kImage.CreateEncodableSource(bitmap)); Logger.Log("Successfully encoded " + fname, Helpers.LogLevel.Info); } diff --git a/LibreMetaverse/LibreMetaverse.csproj b/LibreMetaverse/LibreMetaverse.csproj index ecbccd2e..6ac9b87e 100644 --- a/LibreMetaverse/LibreMetaverse.csproj +++ b/LibreMetaverse/LibreMetaverse.csproj @@ -43,10 +43,10 @@ True + - diff --git a/Programs/examples/TestClient/Commands/Inventory/DumpOutfitCommand.cs b/Programs/examples/TestClient/Commands/Inventory/DumpOutfitCommand.cs index 23c81f8a..95f38825 100644 --- a/Programs/examples/TestClient/Commands/Inventory/DumpOutfitCommand.cs +++ b/Programs/examples/TestClient/Commands/Inventory/DumpOutfitCommand.cs @@ -29,7 +29,10 @@ using System; using System.Text; using System.IO; using System.Collections.Generic; +using CSJ2K; using OpenMetaverse.Assets; +using Pfim; +using SkiaSharp; namespace OpenMetaverse.TestClient { @@ -114,15 +117,15 @@ namespace OpenMetaverse.TestClient try { File.WriteAllBytes(assetTexture.AssetID + ".jp2", assetTexture.AssetData); - Console.WriteLine("Wrote JPEG2000 image " + assetTexture.AssetID + ".jp2"); + Console.WriteLine($"Wrote JPEG2000 image {assetTexture.AssetID}.jp2"); - using (var reader = new OpenJpegDotNet.IO.Reader(assetTexture.AssetData)) - { - reader.ReadHeader(); - OpenJpegDotNet.RawImage tga = reader.Decode().ToTarga(); - File.WriteAllBytes(assetTexture.AssetID + ".tga", tga.Bytes); - } - Console.WriteLine("Wrote TGA image " + assetTexture.AssetID + ".tga"); + // FIXME: Need to readd TARGA support! + //var bitmap = J2kImage.FromBytes(assetTexture.AssetData).As(); + //var image = SKImage.FromPixels(bitmap.PeekPixels()); + //var bytes = image.Encode(SKEncodedImageFormat.Tga, 100); + //File.WriteAllBytes(assetTexture.AssetID + ".tga", bytes.ToArray()); + // + //Console.WriteLine($"Wrote TGA image {assetTexture.AssetID}.tga"); } catch (Exception e) { @@ -131,7 +134,7 @@ namespace OpenMetaverse.TestClient } else { - Console.WriteLine("Failed to download image " + assetTexture.AssetID); + Console.WriteLine($"Failed to download image {assetTexture.AssetID}"); } OutfitAssets.Remove(assetTexture.AssetID); diff --git a/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs b/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs index 31278b50..c7c9f517 100644 --- a/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs +++ b/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs @@ -27,6 +27,7 @@ using System; using System.Threading; +using CSJ2K; using SkiaSharp; namespace OpenMetaverse.TestClient @@ -105,11 +106,7 @@ namespace OpenMetaverse.TestClient // Upload JPEG2000 images untouched uploadData = System.IO.File.ReadAllBytes(fileName); - using (var reader = new OpenJpegDotNet.IO.Reader(uploadData)) - { - reader.ReadHeader(); - bitmap = reader.DecodeToBitmap(); - } + bitmap = J2kImage.FromBytes(uploadData).As(); } else { @@ -153,11 +150,7 @@ namespace OpenMetaverse.TestClient bitmap = SKBitmap.FromImage(scaledImage); } } - - using (var writer = new OpenJpegDotNet.IO.Writer(bitmap)) - { - uploadData = writer.Encode(); - } + uploadData = J2kImage.ToBytes(J2kImage.CreateEncodableSource(bitmap)); } catch (Exception ex) { diff --git a/Programs/examples/TestClient/TestClient.csproj b/Programs/examples/TestClient/TestClient.csproj index 4a2a25db..5a7aae94 100644 --- a/Programs/examples/TestClient/TestClient.csproj +++ b/Programs/examples/TestClient/TestClient.csproj @@ -16,6 +16,7 @@ +