diff --git a/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj b/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj index 07e7e324..efedecf2 100644 --- a/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj +++ b/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj @@ -50,7 +50,6 @@ - diff --git a/LibreMetaverse.Rendering.Meshmerizer/MeshmerizerR.cs b/LibreMetaverse.Rendering.Meshmerizer/MeshmerizerR.cs index 73f91e58..da6cf607 100644 --- a/LibreMetaverse.Rendering.Meshmerizer/MeshmerizerR.cs +++ b/LibreMetaverse.Rendering.Meshmerizer/MeshmerizerR.cs @@ -36,7 +36,7 @@ using System; using System.Collections.Generic; using System.IO; -using IronSoftware.Drawing; +using SkiaSharp; using OpenMetaverse.StructuredData; using LibreMetaverse.PrimMesher; @@ -130,7 +130,7 @@ namespace OpenMetaverse.Rendering /// Sculpt texture /// Level of detail to generate the mesh at /// The generated mesh or null on failure - public SimpleMesh GenerateSimpleSculptMesh(Primitive prim, AnyBitmap sculptTexture, DetailLevel lod) + public SimpleMesh GenerateSimpleSculptMesh(Primitive prim, SKBitmap sculptTexture, DetailLevel lod) { var faceted = GenerateFacetedSculptMesh(prim, sculptTexture, lod); @@ -225,7 +225,7 @@ namespace OpenMetaverse.Rendering /// routine since all the context for finding teh texture is elsewhere. /// /// The faceted mesh or null if can't do it - public FacetedMesh GenerateFacetedSculptMesh(Primitive prim, AnyBitmap scupltTexture, DetailLevel lod) + public FacetedMesh GenerateFacetedSculptMesh(Primitive prim, SKBitmap scupltTexture, DetailLevel lod) { LibreMetaverse.PrimMesher.SculptMesh.SculptType smSculptType; switch (prim.Sculpt.Type) diff --git a/LibreMetaverse.Rendering.Simple/SimpleRenderer.cs b/LibreMetaverse.Rendering.Simple/SimpleRenderer.cs index d5e4284d..134de88b 100644 --- a/LibreMetaverse.Rendering.Simple/SimpleRenderer.cs +++ b/LibreMetaverse.Rendering.Simple/SimpleRenderer.cs @@ -26,7 +26,7 @@ */ using System.Collections.Generic; -using IronSoftware.Drawing; +using SkiaSharp; namespace OpenMetaverse.Rendering { @@ -48,7 +48,7 @@ namespace OpenMetaverse.Rendering return mesh; } - public SimpleMesh GenerateSimpleSculptMesh(Primitive prim, AnyBitmap sculptTexture, DetailLevel lod) + public SimpleMesh GenerateSimpleSculptMesh(Primitive prim, SKBitmap sculptTexture, DetailLevel lod) { return GenerateSimpleMesh(prim, lod); } @@ -67,7 +67,7 @@ namespace OpenMetaverse.Rendering return mesh; } - public FacetedMesh GenerateFacetedSculptMesh(Primitive prim, AnyBitmap sculptTexture, DetailLevel lod) + public FacetedMesh GenerateFacetedSculptMesh(Primitive prim, SKBitmap sculptTexture, DetailLevel lod) { return GenerateFacetedMesh(prim, lod); } diff --git a/LibreMetaverse/Imaging/BakeLayer.cs b/LibreMetaverse/Imaging/BakeLayer.cs index fa27efee..3a2d64ef 100644 --- a/LibreMetaverse/Imaging/BakeLayer.cs +++ b/LibreMetaverse/Imaging/BakeLayer.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; using System.IO; -using IronSoftware.Drawing; +using SkiaSharp; using OpenMetaverse.Assets; namespace OpenMetaverse.Imaging @@ -356,14 +356,14 @@ namespace OpenMetaverse.Imaging { try { - AnyBitmap bitmap = null; + SKBitmap bitmap = null; lock (ResourceSync) { using (Stream stream = Helpers.GetResourceStream(fileName, Settings.RESOURCE_DIR)) { if (stream != null) { - bitmap = SkiaSharp.SKImage.FromEncodedData(stream); + bitmap = SKBitmap.Decode(stream); } } } diff --git a/LibreMetaverse/Imaging/ManagedImage.cs b/LibreMetaverse/Imaging/ManagedImage.cs index 3bd26907..83eb502d 100644 --- a/LibreMetaverse/Imaging/ManagedImage.cs +++ b/LibreMetaverse/Imaging/ManagedImage.cs @@ -26,7 +26,7 @@ */ using System; -using IronSoftware.Drawing; +using SkiaSharp; namespace OpenMetaverse.Imaging { @@ -117,16 +117,16 @@ namespace OpenMetaverse.Imaging /// Constructs ManagedImage class from AnyBitmap /// /// Input AnyBitmap - public ManagedImage(AnyBitmap bitmap) + public ManagedImage(SKBitmap bitmap) { Width = bitmap.Width; Height = bitmap.Height; var pixelCount = Width * Height; - var bpp = bitmap.BitsPerPixel; + var bpp = bitmap.BytesPerPixel; switch (bpp) { - case 32: + case 4: Channels = ImageChannels.Alpha | ImageChannels.Color; Red = new byte[pixelCount]; Green = new byte[pixelCount]; @@ -135,7 +135,7 @@ namespace OpenMetaverse.Imaging unsafe { - byte* pixel = (byte*)bitmap.Scan0; + byte* pixel = (byte*)bitmap.GetPixels(); for (var i = 0; i < pixelCount; ++i) { @@ -148,7 +148,7 @@ namespace OpenMetaverse.Imaging } break; - case 24: + case 3: Channels = ImageChannels.Color; Red = new byte[pixelCount]; Green = new byte[pixelCount]; @@ -156,7 +156,7 @@ namespace OpenMetaverse.Imaging unsafe { - byte* pixel = (byte*)bitmap.Scan0; + byte* pixel = (byte*)bitmap.GetPixels(); for (var i = 0; i < pixelCount; ++i) { @@ -168,7 +168,7 @@ namespace OpenMetaverse.Imaging } break; - case 16: + case 2: Channels = ImageChannels.Gray; Red = new byte[pixelCount]; @@ -340,7 +340,7 @@ namespace OpenMetaverse.Imaging /// origin, suitable for feeding directly into OpenGL /// /// A byte array containing raw texture data - public AnyBitmap ExportBitmap() + public SKBitmap ExportBitmap() { var raw = new byte[Width * Height * 4]; @@ -377,7 +377,8 @@ namespace OpenMetaverse.Imaging } } - return AnyBitmap.FromBytes(raw); + var img = SKImage.FromEncodedData(raw); + return SKBitmap.FromImage(img); } public byte[] ExportTGA() diff --git a/LibreMetaverse/ImportExport/ColladalLoader.cs b/LibreMetaverse/ImportExport/ColladalLoader.cs index b96b566f..3d29707d 100644 --- a/LibreMetaverse/ImportExport/ColladalLoader.cs +++ b/LibreMetaverse/ImportExport/ColladalLoader.cs @@ -33,10 +33,8 @@ using System.IO; using System.Xml; using System.Linq; using System.Xml.Serialization; -using IronSoftware.Drawing; using OpenMetaverse.ImportExport.Collada14; using OpenMetaverse.Rendering; -using OpenMetaverse.Imaging; using SkiaSharp; namespace OpenMetaverse.ImportExport @@ -120,7 +118,7 @@ namespace OpenMetaverse.ImportExport { string ext = System.IO.Path.GetExtension(material.Texture).ToLower(); - AnyBitmap bitmap; + SKBitmap bitmap; switch (ext) { @@ -129,7 +127,8 @@ namespace OpenMetaverse.ImportExport material.TextureData = File.ReadAllBytes(fname); return; default: - bitmap = AnyBitmap.FromFile(fname); + var img = SKImage.FromEncodedData(fname); + bitmap = SKBitmap.FromImage(img); break; } @@ -154,7 +153,7 @@ namespace OpenMetaverse.ImportExport var scaledImage = SKImage.Create(info); var skImage = SKImage.FromBitmap(bitmap); skImage.ScalePixels(scaledImage.PeekPixels(), SKFilterQuality.High); - bitmap = scaledImage; + bitmap = SKBitmap.FromImage(scaledImage); } using (var writer = new OpenJpegDotNet.IO.Writer(bitmap)) diff --git a/LibreMetaverse/Interfaces/IRendering.cs b/LibreMetaverse/Interfaces/IRendering.cs index 14e5f2a5..073f01a8 100644 --- a/LibreMetaverse/Interfaces/IRendering.cs +++ b/LibreMetaverse/Interfaces/IRendering.cs @@ -26,7 +26,7 @@ using System; using System.Collections.Generic; -using IronSoftware.Drawing; +using SkiaSharp; namespace OpenMetaverse.Rendering { @@ -67,7 +67,7 @@ namespace OpenMetaverse.Rendering /// Sculpt texture /// Level of detail to generate the mesh at /// The generated mesh - SimpleMesh GenerateSimpleSculptMesh(Primitive prim, AnyBitmap sculptTexture, DetailLevel lod); + SimpleMesh GenerateSimpleSculptMesh(Primitive prim, SKBitmap sculptTexture, DetailLevel lod); /// /// Generates a series of faces, each face containing a mesh and @@ -86,7 +86,7 @@ namespace OpenMetaverse.Rendering /// Sculpt texture /// Level of detail to generate the mesh at /// The generated mesh - FacetedMesh GenerateFacetedSculptMesh(Primitive prim, AnyBitmap sculptTexture, DetailLevel lod); + FacetedMesh GenerateFacetedSculptMesh(Primitive prim, SKBitmap sculptTexture, DetailLevel lod); /// /// Apply texture coordinate modifications from a diff --git a/LibreMetaverse/LibreMetaverse.csproj b/LibreMetaverse/LibreMetaverse.csproj index 5f892ef5..67031ea5 100644 --- a/LibreMetaverse/LibreMetaverse.csproj +++ b/LibreMetaverse/LibreMetaverse.csproj @@ -43,7 +43,6 @@ True - diff --git a/PrimMesher/LibreMetaverse.PrimMesher.csproj b/PrimMesher/LibreMetaverse.PrimMesher.csproj index a6e94ed0..b2f186d3 100644 --- a/PrimMesher/LibreMetaverse.PrimMesher.csproj +++ b/PrimMesher/LibreMetaverse.PrimMesher.csproj @@ -52,7 +52,6 @@ - diff --git a/PrimMesher/SculptMap.cs b/PrimMesher/SculptMap.cs index 101c168f..da688f0d 100644 --- a/PrimMesher/SculptMap.cs +++ b/PrimMesher/SculptMap.cs @@ -27,7 +27,6 @@ using System; using System.Collections.Generic; -using IronSoftware.Drawing; using SkiaSharp; namespace LibreMetaverse.PrimMesher @@ -44,7 +43,7 @@ namespace LibreMetaverse.PrimMesher { } - public SculptMap(AnyBitmap bm, int lod) + public SculptMap(SKBitmap bm, int lod) { var bmW = bm.Width; var bmH = bm.Height; @@ -100,9 +99,9 @@ namespace LibreMetaverse.PrimMesher { var c = bm.GetPixel(x, y); - redBytes[byteNdx] = c.R; - greenBytes[byteNdx] = c.G; - blueBytes[byteNdx] = c.B; + redBytes[byteNdx] = c.Red; + greenBytes[byteNdx] = c.Green; + blueBytes[byteNdx] = c.Blue; ++byteNdx; } @@ -113,9 +112,9 @@ namespace LibreMetaverse.PrimMesher var c = bm.GetPixel(x < width ? x * 2 : x * 2 - 1, y < height ? y * 2 : y * 2 - 1); - redBytes[byteNdx] = c.R; - greenBytes[byteNdx] = c.G; - blueBytes[byteNdx] = c.B; + redBytes[byteNdx] = c.Red; + greenBytes[byteNdx] = c.Green; + blueBytes[byteNdx] = c.Blue; ++byteNdx; } @@ -163,13 +162,13 @@ namespace LibreMetaverse.PrimMesher return rows; } - private AnyBitmap ScaleImage(AnyBitmap srcImage, int destWidth, int destHeight) + private SKBitmap ScaleImage(SKBitmap srcImage, int destWidth, int destHeight) { var info = new SKImageInfo(destWidth, destHeight); var scaledImage = SKImage.Create(info); var skImage = SKImage.FromBitmap(srcImage); skImage.ScalePixels(scaledImage.PeekPixels(), SKFilterQuality.High); - return scaledImage; + return SKBitmap.FromImage(scaledImage); } } } \ No newline at end of file diff --git a/PrimMesher/SculptMesh.cs b/PrimMesher/SculptMesh.cs index 132f3b1a..1deafbab 100644 --- a/PrimMesher/SculptMesh.cs +++ b/PrimMesher/SculptMesh.cs @@ -28,8 +28,7 @@ using System; using System.Collections.Generic; using System.IO; -using IronSoftware.Drawing; -using Color = IronSoftware.Drawing.Color; +using SkiaSharp; namespace LibreMetaverse.PrimMesher { @@ -53,9 +52,9 @@ namespace LibreMetaverse.PrimMesher public SculptMesh(string fileName, int sculptType, int lod, int viewerMode, int mirror, int invert) { - var bitmap = AnyBitmap.FromFile(fileName); - _SculptMesh(bitmap, (SculptType) sculptType, lod, viewerMode != 0, mirror != 0, invert != 0); - bitmap.Dispose(); + var img = SKImage.FromEncodedData(fileName); + var bitmap = SKBitmap.FromImage(img); + _SculptMesh(bitmap, (SculptType)sculptType, lod, viewerMode != 0, mirror != 0, invert != 0); } /// @@ -165,12 +164,12 @@ namespace LibreMetaverse.PrimMesher calcVertexNormals(SculptType.plane, numXElements, numYElements); } - public SculptMesh(AnyBitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode) + public SculptMesh(SKBitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode) { _SculptMesh(sculptBitmap, sculptType, lod, viewerMode, false, false); } - public SculptMesh(AnyBitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, + public SculptMesh(SKBitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, bool invert) { _SculptMesh(sculptBitmap, sculptType, lod, viewerMode, mirror, invert); @@ -192,7 +191,8 @@ namespace LibreMetaverse.PrimMesher public SculptMesh SculptMeshFromFile(string fileName, SculptType sculptType, int lod, bool viewerMode) { - var bitmap = AnyBitmap.FromFile(fileName); + var img = SKImage.FromEncodedData(fileName); + var bitmap = SKBitmap.FromImage(img); var sculptMesh = new SculptMesh(bitmap, sculptType, lod, viewerMode); bitmap.Dispose(); return sculptMesh; @@ -208,7 +208,7 @@ namespace LibreMetaverse.PrimMesher /// /// /// - private List> bitmap2Coords(AnyBitmap bitmap, int scale, bool mirror) + private List> bitmap2Coords(SKBitmap bitmap, int scale, bool mirror) { var numRows = bitmap.Height / scale; var numCols = bitmap.Width / scale; @@ -237,14 +237,14 @@ namespace LibreMetaverse.PrimMesher for (imageY = imageYStart; imageY < imageYEnd; imageY++) { var c = bitmap.GetPixel(imageX, imageY); - if (c.A != 255) + if (c.Alpha != 255) { - bitmap.SetPixel(imageX, imageY, Color.FromArgb(255, c.R, c.G, c.B)); + bitmap.SetPixel(imageX, imageY, c.WithAlpha(255)); c = bitmap.GetPixel(imageX, imageY); } - rSum += c.R; - gSum += c.G; - bSum += c.B; + rSum += c.Red; + gSum += c.Green; + bSum += c.Blue; } row.Add(mirror ? new Coord(-(rSum * pixScale - 0.5f), gSum * pixScale - 0.5f, bSum * pixScale - 0.5f) @@ -255,7 +255,7 @@ namespace LibreMetaverse.PrimMesher return rows; } - private List> bitmap2CoordsSampled(AnyBitmap bitmap, int scale, bool mirror) + private List> bitmap2CoordsSampled(SKBitmap bitmap, int scale, bool mirror) { var numRows = bitmap.Height / scale; var numCols = bitmap.Width / scale; @@ -278,15 +278,15 @@ namespace LibreMetaverse.PrimMesher if (colNdx == numCols) imageX--; var c = bitmap.GetPixel(imageX, imageY); - if (c.A != 255) + if (c.Alpha != 255) { - bitmap.SetPixel(imageX, imageY, Color.FromArgb(255, c.R, c.G, c.B)); + bitmap.SetPixel(imageX, imageY, c.WithAlpha(255)); c = bitmap.GetPixel(imageX, imageY); } row.Add(mirror - ? new Coord(-(c.R * pixScale - 0.5f), c.G * pixScale - 0.5f, c.B * pixScale - 0.5f) - : new Coord(c.R * pixScale - 0.5f, c.G * pixScale - 0.5f, c.B * pixScale - 0.5f)); + ? new Coord(-(c.Red * pixScale - 0.5f), c.Green * pixScale - 0.5f, c.Blue * pixScale - 0.5f) + : new Coord(c.Red * pixScale - 0.5f, c.Green * pixScale - 0.5f, c.Blue * pixScale - 0.5f)); } rows.Add(row); } @@ -294,7 +294,7 @@ namespace LibreMetaverse.PrimMesher } - private void _SculptMesh(AnyBitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, + private void _SculptMesh(SKBitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, bool invert) { _SculptMesh(new SculptMap(sculptBitmap, lod).ToRows(mirror), sculptType, viewerMode, mirror, invert); diff --git a/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs b/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs index 36a5e403..c9a4af7c 100644 --- a/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs +++ b/Programs/examples/TestClient/Commands/Inventory/UploadImageCommand.cs @@ -27,7 +27,6 @@ using System; using System.Threading; -using IronSoftware.Drawing; using SkiaSharp; namespace OpenMetaverse.TestClient @@ -100,7 +99,7 @@ namespace OpenMetaverse.TestClient try { - AnyBitmap bitmap; + SKBitmap bitmap; if (lowfilename.EndsWith(".jp2") || lowfilename.EndsWith(".j2c")) { // Upload JPEG2000 images untouched @@ -114,7 +113,8 @@ namespace OpenMetaverse.TestClient } else { - bitmap = AnyBitmap.FromFile(fileName); + var img = SKImage.FromEncodedData(fileName); + bitmap = SKBitmap.FromImage(img); int oldwidth = bitmap.Width; int oldheight = bitmap.Height; @@ -125,7 +125,7 @@ namespace OpenMetaverse.TestClient var skImage = SKImage.FromBitmap(bitmap); skImage.ScalePixels(scaledImage.PeekPixels(), SKFilterQuality.High); - bitmap = scaledImage; + bitmap = SKBitmap.FromImage(scaledImage); oldwidth = 256; oldheight = 256; @@ -142,7 +142,7 @@ namespace OpenMetaverse.TestClient var skImage = SKImage.FromBitmap(bitmap); skImage.ScalePixels(scaledImage.PeekPixels(), SKFilterQuality.High); - bitmap = scaledImage; + bitmap = SKBitmap.FromImage(scaledImage); } }