diff --git a/build/Stride.sln b/build/Stride.sln
index c7060e2b2c..e05726524f 100644
--- a/build/Stride.sln
+++ b/build/Stride.sln
@@ -338,6 +338,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stride.Importer.3D", "..\so
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stride.BepuPhysics.Tests", "..\sources\engine\Stride.BepuPhysics\Stride.BepuPhysics.Tests\Stride.BepuPhysics.Tests.csproj", "{7B70C783-4085-4702-B3C6-6570FD85CB8F}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stride.FreeImage", "..\sources\tools\Stride.FreeImage\Stride.FreeImage.csproj", "{03695F9B-10E9-4A10-93AE-6402E46F10B5}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1523,6 +1525,18 @@ Global
{7B70C783-4085-4702-B3C6-6570FD85CB8F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7B70C783-4085-4702-B3C6-6570FD85CB8F}.Release|Win32.ActiveCfg = Release|Any CPU
{7B70C783-4085-4702-B3C6-6570FD85CB8F}.Release|Win32.Build.0 = Release|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Debug|Win32.Build.0 = Debug|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Release|Win32.ActiveCfg = Release|Any CPU
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5}.Release|Win32.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1651,6 +1665,7 @@ Global
{7715D094-DF59-4D91-BC9A-9A5118039ECB} = {DE048114-9AE4-467E-A879-188DC0D88A59}
{66EFFDE4-24F0-4E57-9618-0F5577E20A1E} = {6F473FA6-4F8B-4FBA-AE33-EE5AF997D50C}
{7B70C783-4085-4702-B3C6-6570FD85CB8F} = {DE048114-9AE4-467E-A879-188DC0D88A59}
+ {03695F9B-10E9-4A10-93AE-6402E46F10B5} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FF877973-604D-4EA7-B5F5-A129961F9EF2}
diff --git a/sources/engine/Stride/Graphics/StandardImageHelper.Desktop.cs b/sources/engine/Stride/Graphics/StandardImageHelper.Desktop.cs
new file mode 100644
index 0000000000..8e348cb373
--- /dev/null
+++ b/sources/engine/Stride/Graphics/StandardImageHelper.Desktop.cs
@@ -0,0 +1,115 @@
+// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
+// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
+#if STRIDE_PLATFORM_DESKTOP
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+using FreeImageAPI;
+using Stride.Core;
+using RotateFlipType = FreeImageAPI.RotateFlipType;
+
+namespace Stride.Graphics
+{
+ ///
+ /// This class is responsible to provide image loader for png, gif, bmp.
+ ///
+ partial class StandardImageHelper
+ {
+ static StandardImageHelper()
+ {
+ NativeLibraryHelper.PreloadLibrary("freeimage", typeof(StandardImageHelper));
+ }
+
+ public static unsafe Image LoadFromMemory(IntPtr pSource, int size, bool makeACopy, GCHandle? handle)
+ {
+ using var memoryStream = new UnmanagedMemoryStream((byte*)pSource, size, capacity: size, access: FileAccess.Read);
+ using var bitmap = FreeImageBitmap.FromStream(memoryStream);
+
+ bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
+ bitmap.ConvertColorDepth(FREE_IMAGE_COLOR_DEPTH.FICD_32_BPP);
+
+ var image = Image.New2D(bitmap.Width, bitmap.Height, 1, PixelFormat.B8G8R8A8_UNorm, 1, bitmap.Line);
+
+ try
+ {
+ // TODO: Test if still necessary
+ // Directly load image as RGBA instead of BGRA, because OpenGL ES devices don't support it out of the box (extension).
+ Utilities.CopyWithAlignmentFallback((void*)image.PixelBuffer[0].DataPointer, (void*)bitmap.Bits, (uint)image.PixelBuffer[0].BufferStride);
+ }
+ finally
+ {
+ if (handle != null)
+ handle.Value.Free();
+ else if (!makeACopy)
+ Utilities.FreeMemory(pSource);
+ }
+
+ return image;
+ }
+
+ public static void SaveGifFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
+ {
+ SaveFromMemory(pixelBuffers, description, imageStream, FREE_IMAGE_FORMAT.FIF_GIF);
+ }
+
+ public static void SaveTiffFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
+ {
+ SaveFromMemory(pixelBuffers, description, imageStream, FREE_IMAGE_FORMAT.FIF_TIFF);
+ }
+
+ public static void SaveBmpFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
+ {
+ SaveFromMemory(pixelBuffers, description, imageStream, FREE_IMAGE_FORMAT.FIF_BMP);
+ }
+
+ public static void SaveJpgFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
+ {
+ SaveFromMemory(pixelBuffers, description, imageStream, FREE_IMAGE_FORMAT.FIF_BMP);
+ }
+
+ public static void SavePngFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
+ {
+ SaveFromMemory(pixelBuffers, description, imageStream, FREE_IMAGE_FORMAT.FIF_PNG);
+ }
+
+ public static void SaveWmpFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static unsafe void SaveFromMemory(PixelBuffer[] pixelBuffers, ImageDescription description, Stream imageStream, FREE_IMAGE_FORMAT imageFormat)
+ {
+ using var bitmap = new FreeImageBitmap(description.Width, description.Height);
+ bitmap.ConvertColorDepth(FREE_IMAGE_COLOR_DEPTH.FICD_32_BPP);
+
+ // Copy memory
+ var format = description.Format;
+ if (format is PixelFormat.R8G8B8A8_UNorm or PixelFormat.R8G8B8A8_UNorm_SRgb)
+ {
+ CopyMemoryBGRA(bitmap.Bits, pixelBuffers[0].DataPointer, pixelBuffers[0].BufferStride);
+ }
+ else if (format is PixelFormat.B8G8R8A8_UNorm or PixelFormat.B8G8R8A8_UNorm_SRgb)
+ {
+ Utilities.CopyWithAlignmentFallback((void*)bitmap.Bits, (void*)pixelBuffers[0].DataPointer, (uint)pixelBuffers[0].BufferStride);
+ }
+ else if (format is PixelFormat.R8_UNorm or PixelFormat.A8_UNorm)
+ {
+ // TODO Ideally we will want to support grayscale images, but the SpriteBatch can only render RGBA for now
+ // so convert the grayscale image as an RGBA and save it
+ CopyMemoryRRR1(bitmap.Bits, pixelBuffers[0].DataPointer, pixelBuffers[0].BufferStride);
+ }
+ else
+ {
+ throw new ArgumentException(
+ message:
+ $"The pixel format {format} is not supported. Supported formats are {PixelFormat.B8G8R8A8_UNorm}, {PixelFormat.B8G8R8A8_UNorm_SRgb}, {PixelFormat.R8G8B8A8_UNorm}, {PixelFormat.R8G8B8A8_UNorm_SRgb}, {PixelFormat.R8_UNorm}, {PixelFormat.A8_UNorm}",
+ paramName: nameof(description));
+ }
+
+ // Save
+ bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
+ bitmap.Save(imageStream, imageFormat);
+ }
+ }
+}
+#endif
diff --git a/sources/engine/Stride/Graphics/StandardImageHelper.Windows.cs b/sources/engine/Stride/Graphics/StandardImageHelper.Windows.cs
deleted file mode 100644
index 37750c0be2..0000000000
--- a/sources/engine/Stride/Graphics/StandardImageHelper.Windows.cs
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
-// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
-#if STRIDE_PLATFORM_DESKTOP
-using System;
-using System.Drawing;
-using System.Drawing.Imaging;
-using System.IO;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using Stride.Core;
-
-namespace Stride.Graphics
-{
- ///
- /// This class is responsible to provide image loader for png, gif, bmp.
- /// TODO: Replace using System.Drawing, as it is not available on all platforms (not on Windows 8/WP8).
- ///
- partial class StandardImageHelper
- {
- public static unsafe Image LoadFromMemory(IntPtr pSource, int size, bool makeACopy, GCHandle? handle)
- {
- using var memoryStream = new UnmanagedMemoryStream((byte*)pSource, size, capacity: size, access: FileAccess.Read);
- using var bitmap = (Bitmap)System.Drawing.Image.FromStream(memoryStream);
- var sourceArea = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
- // Lock System.Drawing.Bitmap
-
- var bitmapData = bitmap.LockBits(sourceArea, ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
- var image = Image.New2D(bitmap.Width, bitmap.Height, 1, PixelFormat.B8G8R8A8_UNorm, 1, bitmapData.Stride);
- // var dataRect = new DataRectangle(bitmapData.Stride, bitmapData.Scan0);
-
- try
- {
- // TODO: Test if still necessary
- // Directly load image as RGBA instead of BGRA, because OpenGL ES devices don't support it out of the box (extension).
- //image.Description.Format = PixelFormat.R8G8B8A8_UNorm;
- //CopyMemoryBGRA(image.PixelBuffer[0].DataPointer, bitmapData.Scan0, image.PixelBuffer[0].BufferStride);
- Utilities.CopyWithAlignmentFallback((void*)image.PixelBuffer[0].DataPointer, (void*)bitmapData.Scan0, (uint)image.PixelBuffer[0].BufferStride);
- }
- finally
- {
- bitmap.UnlockBits(bitmapData);
-
- if (handle != null)
- handle.Value.Free();
- else if (!makeACopy)
- Utilities.FreeMemory(pSource);
- }
-
- return image;
- }
-
- public static void SaveGifFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
- {
- SaveFromMemory(pixelBuffers, count, description, imageStream, ImageFormat.Gif);
- }
-
- public static void SaveTiffFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
- {
- SaveFromMemory(pixelBuffers, count, description, imageStream, ImageFormat.Tiff);
- }
-
- public static void SaveBmpFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
- {
- SaveFromMemory(pixelBuffers, count, description, imageStream, ImageFormat.Bmp);
- }
-
- public static void SaveJpgFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
- {
- SaveFromMemory(pixelBuffers, count, description, imageStream, ImageFormat.Jpeg);
- }
-
- public static void SavePngFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
- {
- SaveFromMemory(pixelBuffers, count, description, imageStream, ImageFormat.Png);
- }
-
- public static void SaveWmpFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream)
- {
- throw new NotImplementedException();
- }
-
- private static unsafe void SaveFromMemory(PixelBuffer[] pixelBuffers, int count, ImageDescription description, Stream imageStream, ImageFormat imageFormat)
- {
- using var bitmap = new Bitmap(description.Width, description.Height);
- var sourceArea = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
-
- // Lock System.Drawing.Bitmap
- var bitmapData = bitmap.LockBits(sourceArea, ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
-
- try
- {
- // Copy memory
- var format = description.Format;
- if (format == PixelFormat.R8G8B8A8_UNorm || format == PixelFormat.R8G8B8A8_UNorm_SRgb)
- {
- CopyMemoryBGRA(bitmapData.Scan0, pixelBuffers[0].DataPointer, pixelBuffers[0].BufferStride);
- }
- else if (format == PixelFormat.B8G8R8A8_UNorm || format == PixelFormat.B8G8R8A8_UNorm_SRgb)
- {
- Utilities.CopyWithAlignmentFallback((void*)bitmapData.Scan0, (void*)pixelBuffers[0].DataPointer, (uint)pixelBuffers[0].BufferStride);
- }
- else if (format == PixelFormat.R8_UNorm || format == PixelFormat.A8_UNorm)
- {
- // TODO Ideally we will want to support grayscale images, but the SpriteBatch can only render RGBA for now
- // so convert the grayscale image as an RGBA and save it
- CopyMemoryRRR1(bitmapData.Scan0, pixelBuffers[0].DataPointer, pixelBuffers[0].BufferStride);
- }
- else
- {
- throw new ArgumentException(
- message: $"The pixel format {format} is not supported. Supported formats are {PixelFormat.B8G8R8A8_UNorm}, {PixelFormat.B8G8R8A8_UNorm_SRgb}, {PixelFormat.R8G8B8A8_UNorm}, {PixelFormat.R8G8B8A8_UNorm_SRgb}, {PixelFormat.R8_UNorm}, {PixelFormat.A8_UNorm}",
- paramName: nameof(description));
- }
- }
- finally
- {
- bitmap.UnlockBits(bitmapData);
- }
-
- // Save
- bitmap.Save(imageStream, imageFormat);
- }
- }
-}
-#endif
diff --git a/sources/engine/Stride/Stride.csproj b/sources/engine/Stride/Stride.csproj
index ac4882991e..ec99888c23 100644
--- a/sources/engine/Stride/Stride.csproj
+++ b/sources/engine/Stride/Stride.csproj
@@ -32,6 +32,7 @@
+
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImageBitmap.cs b/sources/tools/Stride.FreeImage/Classes/FreeImageBitmap.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImageBitmap.cs
rename to sources/tools/Stride.FreeImage/Classes/FreeImageBitmap.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImageEngine.cs b/sources/tools/Stride.FreeImage/Classes/FreeImageEngine.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImageEngine.cs
rename to sources/tools/Stride.FreeImage/Classes/FreeImageEngine.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImagePlugin.cs b/sources/tools/Stride.FreeImage/Classes/FreeImagePlugin.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImagePlugin.cs
rename to sources/tools/Stride.FreeImage/Classes/FreeImagePlugin.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImageStreamIO.cs b/sources/tools/Stride.FreeImage/Classes/FreeImageStreamIO.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/FreeImageStreamIO.cs
rename to sources/tools/Stride.FreeImage/Classes/FreeImageStreamIO.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/GifInformation.cs b/sources/tools/Stride.FreeImage/Classes/GifInformation.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/GifInformation.cs
rename to sources/tools/Stride.FreeImage/Classes/GifInformation.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/ImageMetadata.cs b/sources/tools/Stride.FreeImage/Classes/ImageMetadata.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/ImageMetadata.cs
rename to sources/tools/Stride.FreeImage/Classes/ImageMetadata.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/LocalPlugin.cs b/sources/tools/Stride.FreeImage/Classes/LocalPlugin.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/LocalPlugin.cs
rename to sources/tools/Stride.FreeImage/Classes/LocalPlugin.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MemoryArray.cs b/sources/tools/Stride.FreeImage/Classes/MemoryArray.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MemoryArray.cs
rename to sources/tools/Stride.FreeImage/Classes/MemoryArray.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MetadataModel.cs b/sources/tools/Stride.FreeImage/Classes/MetadataModel.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MetadataModel.cs
rename to sources/tools/Stride.FreeImage/Classes/MetadataModel.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MetadataModels.cs b/sources/tools/Stride.FreeImage/Classes/MetadataModels.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MetadataModels.cs
rename to sources/tools/Stride.FreeImage/Classes/MetadataModels.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MetadataTag.cs b/sources/tools/Stride.FreeImage/Classes/MetadataTag.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/MetadataTag.cs
rename to sources/tools/Stride.FreeImage/Classes/MetadataTag.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/Palette.cs b/sources/tools/Stride.FreeImage/Classes/Palette.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/Palette.cs
rename to sources/tools/Stride.FreeImage/Classes/Palette.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/PluginRepository.cs b/sources/tools/Stride.FreeImage/Classes/PluginRepository.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/PluginRepository.cs
rename to sources/tools/Stride.FreeImage/Classes/PluginRepository.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/Scanline.cs b/sources/tools/Stride.FreeImage/Classes/Scanline.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/Scanline.cs
rename to sources/tools/Stride.FreeImage/Classes/Scanline.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/StreamWrapper.cs b/sources/tools/Stride.FreeImage/Classes/StreamWrapper.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Classes/StreamWrapper.cs
rename to sources/tools/Stride.FreeImage/Classes/StreamWrapper.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Delegates.cs b/sources/tools/Stride.FreeImage/Delegates.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Delegates.cs
rename to sources/tools/Stride.FreeImage/Delegates.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/DisposalMethodType.cs b/sources/tools/Stride.FreeImage/Enumerations/DisposalMethodType.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/DisposalMethodType.cs
rename to sources/tools/Stride.FreeImage/Enumerations/DisposalMethodType.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_CHANNEL.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_CHANNEL.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_CHANNEL.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_CHANNEL.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_DEPTH.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_DEPTH.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_DEPTH.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_DEPTH.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_OPTIONS.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_OPTIONS.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_OPTIONS.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_OPTIONS.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_TYPE.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_TYPE.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COLOR_TYPE.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COLOR_TYPE.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COMPARE_FLAGS.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COMPARE_FLAGS.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_COMPARE_FLAGS.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_COMPARE_FLAGS.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_DITHER.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_DITHER.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_DITHER.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_DITHER.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_FILTER.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_FILTER.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_FILTER.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_FILTER.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_FORMAT.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_FORMAT.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_FORMAT.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_FORMAT.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_JPEG_OPERATION.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_JPEG_OPERATION.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_JPEG_OPERATION.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_JPEG_OPERATION.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_LOAD_FLAGS.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_LOAD_FLAGS.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_LOAD_FLAGS.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_LOAD_FLAGS.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_MDMODEL.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_MDMODEL.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_MDMODEL.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_MDMODEL.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_MDTYPE.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_MDTYPE.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_MDTYPE.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_MDTYPE.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_METADATA_COPY.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_METADATA_COPY.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_METADATA_COPY.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_METADATA_COPY.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_QUANTIZE.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_QUANTIZE.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_QUANTIZE.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_QUANTIZE.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_SAVE_FLAGS.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_SAVE_FLAGS.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_SAVE_FLAGS.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_SAVE_FLAGS.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_TMO.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_TMO.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_TMO.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_TMO.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_TYPE.cs b/sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_TYPE.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/FREE_IMAGE_TYPE.cs
rename to sources/tools/Stride.FreeImage/Enumerations/FREE_IMAGE_TYPE.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/ICC_FLAGS.cs b/sources/tools/Stride.FreeImage/Enumerations/ICC_FLAGS.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/ICC_FLAGS.cs
rename to sources/tools/Stride.FreeImage/Enumerations/ICC_FLAGS.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/MD_SEARCH_FLAGS.cs b/sources/tools/Stride.FreeImage/Enumerations/MD_SEARCH_FLAGS.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Enumerations/MD_SEARCH_FLAGS.cs
rename to sources/tools/Stride.FreeImage/Enumerations/MD_SEARCH_FLAGS.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/FreeImageStaticImports.cs b/sources/tools/Stride.FreeImage/FreeImageStaticImports.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/FreeImageStaticImports.cs
rename to sources/tools/Stride.FreeImage/FreeImageStaticImports.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/FreeImageWrapper.cs b/sources/tools/Stride.FreeImage/FreeImageWrapper.cs
similarity index 97%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/FreeImageWrapper.cs
rename to sources/tools/Stride.FreeImage/FreeImageWrapper.cs
index 9dbbc21a4a..1e33d9c856 100644
--- a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/FreeImageWrapper.cs
+++ b/sources/tools/Stride.FreeImage/FreeImageWrapper.cs
@@ -45,7 +45,6 @@
using FreeImageAPI.IO;
using FreeImageAPI.Metadata;
using Stride.Core;
-using StridePixelFormat = Stride.Graphics.PixelFormat;
namespace FreeImageAPI
{
@@ -2423,165 +2422,6 @@ public static bool GetFormatParameters(
return result;
}
- ///
- /// Retrieves all parameters needed to create a new FreeImage bitmap from the pixel format.
- ///
- /// The of the image.
- /// Returns the type used for the new bitmap.
- /// Returns the color depth for the new bitmap.
- /// Returns the red_mask for the new bitmap.
- /// Returns the green_mask for the new bitmap.
- /// Returns the blue_mask for the new bitmap.
- /// True in case a matching conversion exists; else false.
- ///
- public static bool GetFormatParameters(
- StridePixelFormat format,
- out FREE_IMAGE_TYPE type,
- out uint bpp,
- out uint redMask,
- out uint greenMask,
- out uint blueMask)
- {
- var result = true;
- type = FREE_IMAGE_TYPE.FIT_UNKNOWN;
- bpp = 0;
- redMask = 0;
- greenMask = 0;
- blueMask = 0;
-
- switch (format)
- {
- case StridePixelFormat.R32G32B32A32_Float:
- type = FREE_IMAGE_TYPE.FIT_RGBAF;
- bpp = 128;
- break;
- case StridePixelFormat.R32G32B32_Float:
- type = FREE_IMAGE_TYPE.FIT_RGBF;
- bpp = 96;
- break;
- case StridePixelFormat.R16G16B16A16_Typeless:
- case StridePixelFormat.R16G16B16A16_Float:
- case StridePixelFormat.R16G16B16A16_UNorm:
- case StridePixelFormat.R16G16B16A16_UInt:
- case StridePixelFormat.R16G16B16A16_SNorm:
- case StridePixelFormat.R16G16B16A16_SInt:
- type = FREE_IMAGE_TYPE.FIT_RGBA16;
- bpp = 64;
- break;
- case StridePixelFormat.D32_Float:
- case StridePixelFormat.R32_Float:
- type = FREE_IMAGE_TYPE.FIT_FLOAT;
- bpp = 32;
- break;
- case StridePixelFormat.R32_SInt:
- type = FREE_IMAGE_TYPE.FIT_INT32;
- bpp = 32;
- break;
- case StridePixelFormat.R32_UInt:
- type = FREE_IMAGE_TYPE.FIT_UINT32;
- bpp = 32;
- break;
- case StridePixelFormat.R16_SInt:
- type = FREE_IMAGE_TYPE.FIT_INT16;
- bpp = 16;
- break;
- case StridePixelFormat.R16_UInt:
- type = FREE_IMAGE_TYPE.FIT_UINT16;
- bpp = 16;
- break;
- case StridePixelFormat.R32_Typeless:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 32;
- break;
- case StridePixelFormat.R8G8B8A8_Typeless:
- case StridePixelFormat.R8G8B8A8_UNorm:
- case StridePixelFormat.R8G8B8A8_UNorm_SRgb:
- case StridePixelFormat.R8G8B8A8_UInt:
- case StridePixelFormat.R8G8B8A8_SNorm:
- case StridePixelFormat.R8G8B8A8_SInt:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 32;
- redMask = FI_RGBA_RED_MASK;
- greenMask = FI_RGBA_GREEN_MASK;
- blueMask = FI_RGBA_BLUE_MASK;
- break;
- case StridePixelFormat.R16G16_Typeless:
- case StridePixelFormat.R16G16_Float:
- case StridePixelFormat.R16G16_UNorm:
- case StridePixelFormat.R16G16_UInt:
- case StridePixelFormat.R16G16_SNorm:
- case StridePixelFormat.R16G16_SInt:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 32;
- redMask = 0xFFFF0000;
- greenMask = 0x0000FFFF;
- break;
- case StridePixelFormat.B8G8R8A8_Typeless:
- case StridePixelFormat.B8G8R8A8_UNorm_SRgb:
- case StridePixelFormat.B8G8R8X8_Typeless:
- case StridePixelFormat.B8G8R8X8_UNorm_SRgb:
- case StridePixelFormat.B8G8R8A8_UNorm:
- case StridePixelFormat.B8G8R8X8_UNorm:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 32;
- redMask = FI_RGBA_BLUE_MASK;
- greenMask = FI_RGBA_GREEN_MASK;
- blueMask = FI_RGBA_RED_MASK;
- break;
-
- case StridePixelFormat.B5G6R5_UNorm:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 16;
- redMask = FI16_565_RED_MASK;
- greenMask = FI16_565_GREEN_MASK;
- blueMask = FI16_565_BLUE_MASK;
- break;
- case StridePixelFormat.B5G5R5A1_UNorm:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 16;
- redMask = FI16_555_RED_MASK;
- greenMask = FI16_555_GREEN_MASK;
- blueMask = FI16_555_BLUE_MASK;
- break;
- case StridePixelFormat.R16_Typeless:
- case StridePixelFormat.R16_Float:
- case StridePixelFormat.D16_UNorm:
- case StridePixelFormat.R16_UNorm:
- case StridePixelFormat.R16_SNorm:
- type = FREE_IMAGE_TYPE.FIT_UINT16;
- bpp = 16;
- break;
- case StridePixelFormat.R8G8_Typeless:
- case StridePixelFormat.R8G8_UNorm:
- case StridePixelFormat.R8G8_UInt:
- case StridePixelFormat.R8G8_SNorm:
- case StridePixelFormat.R8G8_SInt:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 16;
- redMask = 0xFF00;
- greenMask= 0x00FF;
- break;
- case StridePixelFormat.R8_Typeless:
- case StridePixelFormat.R8_UNorm:
- case StridePixelFormat.R8_UInt:
- case StridePixelFormat.R8_SNorm:
- case StridePixelFormat.R8_SInt:
- case StridePixelFormat.A8_UNorm:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 8;
- break;
- case StridePixelFormat.R1_UNorm:
- type = FREE_IMAGE_TYPE.FIT_BITMAP;
- bpp = 1;
- break;
- default:
- result = false;
- break;
- }
-
- return result;
- }
-
///
/// Retrieves all parameters needed to create a new FreeImage bitmap from
/// raw bits .
diff --git a/sources/tools/Stride.FreeImage/Properties/AssemblyInfo.cs b/sources/tools/Stride.FreeImage/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..91be5f2cf4
--- /dev/null
+++ b/sources/tools/Stride.FreeImage/Properties/AssemblyInfo.cs
@@ -0,0 +1,5 @@
+using System.Runtime.CompilerServices;
+
+#pragma warning disable 436 // Stride.PublicKeys is defined in multiple assemblies
+
+[assembly: InternalsVisibleTo("Stride.TextureConverter")]
diff --git a/sources/tools/Stride.FreeImage/Stride.FreeImage.csproj b/sources/tools/Stride.FreeImage/Stride.FreeImage.csproj
new file mode 100644
index 0000000000..e44921d9bd
--- /dev/null
+++ b/sources/tools/Stride.FreeImage/Stride.FreeImage.csproj
@@ -0,0 +1,20 @@
+
+
+
+ $(StrideXplatEditorTargetFramework)
+ enable
+ enable
+
+
+
+ runtimes\%(RecursiveDir)native\%(Filename)%(Extension)
+
+
+
+
+
+
+
+
+
+
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/BITMAP.cs b/sources/tools/Stride.FreeImage/Structs/BITMAP.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/BITMAP.cs
rename to sources/tools/Stride.FreeImage/Structs/BITMAP.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/BITMAPINFO.cs b/sources/tools/Stride.FreeImage/Structs/BITMAPINFO.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/BITMAPINFO.cs
rename to sources/tools/Stride.FreeImage/Structs/BITMAPINFO.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/BITMAPINFOHEADER.cs b/sources/tools/Stride.FreeImage/Structs/BITMAPINFOHEADER.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/BITMAPINFOHEADER.cs
rename to sources/tools/Stride.FreeImage/Structs/BITMAPINFOHEADER.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI16RGB555.cs b/sources/tools/Stride.FreeImage/Structs/FI16RGB555.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI16RGB555.cs
rename to sources/tools/Stride.FreeImage/Structs/FI16RGB555.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI16RGB565.cs b/sources/tools/Stride.FreeImage/Structs/FI16RGB565.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI16RGB565.cs
rename to sources/tools/Stride.FreeImage/Structs/FI16RGB565.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI1BIT.cs b/sources/tools/Stride.FreeImage/Structs/FI1BIT.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI1BIT.cs
rename to sources/tools/Stride.FreeImage/Structs/FI1BIT.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI4BIT.cs b/sources/tools/Stride.FreeImage/Structs/FI4BIT.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FI4BIT.cs
rename to sources/tools/Stride.FreeImage/Structs/FI4BIT.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIBITMAP.cs b/sources/tools/Stride.FreeImage/Structs/FIBITMAP.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIBITMAP.cs
rename to sources/tools/Stride.FreeImage/Structs/FIBITMAP.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FICOMPLEX.cs b/sources/tools/Stride.FreeImage/Structs/FICOMPLEX.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FICOMPLEX.cs
rename to sources/tools/Stride.FreeImage/Structs/FICOMPLEX.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIICCPROFILE.cs b/sources/tools/Stride.FreeImage/Structs/FIICCPROFILE.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIICCPROFILE.cs
rename to sources/tools/Stride.FreeImage/Structs/FIICCPROFILE.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIMEMORY.cs b/sources/tools/Stride.FreeImage/Structs/FIMEMORY.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIMEMORY.cs
rename to sources/tools/Stride.FreeImage/Structs/FIMEMORY.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIMETADATA.cs b/sources/tools/Stride.FreeImage/Structs/FIMETADATA.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIMETADATA.cs
rename to sources/tools/Stride.FreeImage/Structs/FIMETADATA.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIMULTIBITMAP.cs b/sources/tools/Stride.FreeImage/Structs/FIMULTIBITMAP.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIMULTIBITMAP.cs
rename to sources/tools/Stride.FreeImage/Structs/FIMULTIBITMAP.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGB16.cs b/sources/tools/Stride.FreeImage/Structs/FIRGB16.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGB16.cs
rename to sources/tools/Stride.FreeImage/Structs/FIRGB16.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGBA16.cs b/sources/tools/Stride.FreeImage/Structs/FIRGBA16.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGBA16.cs
rename to sources/tools/Stride.FreeImage/Structs/FIRGBA16.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGBAF.cs b/sources/tools/Stride.FreeImage/Structs/FIRGBAF.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGBAF.cs
rename to sources/tools/Stride.FreeImage/Structs/FIRGBAF.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGBF.cs b/sources/tools/Stride.FreeImage/Structs/FIRGBF.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRGBF.cs
rename to sources/tools/Stride.FreeImage/Structs/FIRGBF.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRational.cs b/sources/tools/Stride.FreeImage/Structs/FIRational.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIRational.cs
rename to sources/tools/Stride.FreeImage/Structs/FIRational.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FITAG.cs b/sources/tools/Stride.FreeImage/Structs/FITAG.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FITAG.cs
rename to sources/tools/Stride.FreeImage/Structs/FITAG.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIURational.cs b/sources/tools/Stride.FreeImage/Structs/FIURational.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FIURational.cs
rename to sources/tools/Stride.FreeImage/Structs/FIURational.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FreeImageIO.cs b/sources/tools/Stride.FreeImage/Structs/FreeImageIO.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/FreeImageIO.cs
rename to sources/tools/Stride.FreeImage/Structs/FreeImageIO.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/Plugin.cs b/sources/tools/Stride.FreeImage/Structs/Plugin.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/Plugin.cs
rename to sources/tools/Stride.FreeImage/Structs/Plugin.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/RGBQUAD.cs b/sources/tools/Stride.FreeImage/Structs/RGBQUAD.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/RGBQUAD.cs
rename to sources/tools/Stride.FreeImage/Structs/RGBQUAD.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/RGBTRIPLE.cs b/sources/tools/Stride.FreeImage/Structs/RGBTRIPLE.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/RGBTRIPLE.cs
rename to sources/tools/Stride.FreeImage/Structs/RGBTRIPLE.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/fi_handle.cs b/sources/tools/Stride.FreeImage/Structs/fi_handle.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/Structs/fi_handle.cs
rename to sources/tools/Stride.FreeImage/Structs/fi_handle.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/ImageFlags.cs b/sources/tools/Stride.FreeImage/System.Drawing/ImageFlags.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/ImageFlags.cs
rename to sources/tools/Stride.FreeImage/System.Drawing/ImageFlags.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/PixelFormat.cs b/sources/tools/Stride.FreeImage/System.Drawing/PixelFormat.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/PixelFormat.cs
rename to sources/tools/Stride.FreeImage/System.Drawing/PixelFormat.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/PropertyItem.cs b/sources/tools/Stride.FreeImage/System.Drawing/PropertyItem.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/PropertyItem.cs
rename to sources/tools/Stride.FreeImage/System.Drawing/PropertyItem.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/RotateFlipType.cs b/sources/tools/Stride.FreeImage/System.Drawing/RotateFlipType.cs
similarity index 100%
rename from sources/tools/Stride.TextureConverter/Backend/Wrappers/FINetWrapper/System.Drawing/RotateFlipType.cs
rename to sources/tools/Stride.FreeImage/System.Drawing/RotateFlipType.cs
diff --git a/sources/tools/Stride.TextureConverter/Backend/TexLibraries/FITexLib.cs b/sources/tools/Stride.TextureConverter/Backend/TexLibraries/FITexLib.cs
index 6fe0e8985e..917d4a1470 100644
--- a/sources/tools/Stride.TextureConverter/Backend/TexLibraries/FITexLib.cs
+++ b/sources/tools/Stride.TextureConverter/Backend/TexLibraries/FITexLib.cs
@@ -10,8 +10,7 @@
using Stride.Graphics;
using Stride.TextureConverter.Requests;
using FreeImageAPI;
-using FreeImageAPI.Plugins;
-using System.Runtime.CompilerServices;
+using StridePixelFormat = Stride.Graphics.PixelFormat;
namespace Stride.TextureConverter.TexLibraries
{
@@ -69,7 +68,7 @@ public void StartLibrary(TexImage image)
FREE_IMAGE_TYPE type;
uint bpp, redMask, greenMask, blueMask;
- if (!FreeImage.GetFormatParameters(image.Format, out type, out bpp, out redMask, out greenMask, out blueMask))
+ if (!GetFormatParameters(image.Format, out type, out bpp, out redMask, out greenMask, out blueMask))
{
throw new ArgumentException("The pixel format '{0}' is not supported by FreeImage".ToFormat(image.Format));
}
@@ -611,6 +610,165 @@ private static int GetAlphaDepth(FREE_IMAGE_FORMAT fileFormat, FIBITMAP bitmap)
}
return 0;
}
-
+
+
+ ///
+ /// Retrieves all parameters needed to create a new FreeImage bitmap from the pixel format.
+ ///
+ /// The of the image.
+ /// Returns the type used for the new bitmap.
+ /// Returns the color depth for the new bitmap.
+ /// Returns the red_mask for the new bitmap.
+ /// Returns the green_mask for the new bitmap.
+ /// Returns the blue_mask for the new bitmap.
+ /// True in case a matching conversion exists; else false.
+ ///
+ private static bool GetFormatParameters(
+ StridePixelFormat format,
+ out FREE_IMAGE_TYPE type,
+ out uint bpp,
+ out uint redMask,
+ out uint greenMask,
+ out uint blueMask)
+ {
+ var result = true;
+ type = FREE_IMAGE_TYPE.FIT_UNKNOWN;
+ bpp = 0;
+ redMask = 0;
+ greenMask = 0;
+ blueMask = 0;
+
+ switch (format)
+ {
+ case StridePixelFormat.R32G32B32A32_Float:
+ type = FREE_IMAGE_TYPE.FIT_RGBAF;
+ bpp = 128;
+ break;
+ case StridePixelFormat.R32G32B32_Float:
+ type = FREE_IMAGE_TYPE.FIT_RGBF;
+ bpp = 96;
+ break;
+ case StridePixelFormat.R16G16B16A16_Typeless:
+ case StridePixelFormat.R16G16B16A16_Float:
+ case StridePixelFormat.R16G16B16A16_UNorm:
+ case StridePixelFormat.R16G16B16A16_UInt:
+ case StridePixelFormat.R16G16B16A16_SNorm:
+ case StridePixelFormat.R16G16B16A16_SInt:
+ type = FREE_IMAGE_TYPE.FIT_RGBA16;
+ bpp = 64;
+ break;
+ case StridePixelFormat.D32_Float:
+ case StridePixelFormat.R32_Float:
+ type = FREE_IMAGE_TYPE.FIT_FLOAT;
+ bpp = 32;
+ break;
+ case StridePixelFormat.R32_SInt:
+ type = FREE_IMAGE_TYPE.FIT_INT32;
+ bpp = 32;
+ break;
+ case StridePixelFormat.R32_UInt:
+ type = FREE_IMAGE_TYPE.FIT_UINT32;
+ bpp = 32;
+ break;
+ case StridePixelFormat.R16_SInt:
+ type = FREE_IMAGE_TYPE.FIT_INT16;
+ bpp = 16;
+ break;
+ case StridePixelFormat.R16_UInt:
+ type = FREE_IMAGE_TYPE.FIT_UINT16;
+ bpp = 16;
+ break;
+ case StridePixelFormat.R32_Typeless:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 32;
+ break;
+ case StridePixelFormat.R8G8B8A8_Typeless:
+ case StridePixelFormat.R8G8B8A8_UNorm:
+ case StridePixelFormat.R8G8B8A8_UNorm_SRgb:
+ case StridePixelFormat.R8G8B8A8_UInt:
+ case StridePixelFormat.R8G8B8A8_SNorm:
+ case StridePixelFormat.R8G8B8A8_SInt:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 32;
+ redMask = FreeImage.FI_RGBA_RED_MASK;
+ greenMask = FreeImage.FI_RGBA_GREEN_MASK;
+ blueMask = FreeImage.FI_RGBA_BLUE_MASK;
+ break;
+ case StridePixelFormat.R16G16_Typeless:
+ case StridePixelFormat.R16G16_Float:
+ case StridePixelFormat.R16G16_UNorm:
+ case StridePixelFormat.R16G16_UInt:
+ case StridePixelFormat.R16G16_SNorm:
+ case StridePixelFormat.R16G16_SInt:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 32;
+ redMask = 0xFFFF0000;
+ greenMask = 0x0000FFFF;
+ break;
+ case StridePixelFormat.B8G8R8A8_Typeless:
+ case StridePixelFormat.B8G8R8A8_UNorm_SRgb:
+ case StridePixelFormat.B8G8R8X8_Typeless:
+ case StridePixelFormat.B8G8R8X8_UNorm_SRgb:
+ case StridePixelFormat.B8G8R8A8_UNorm:
+ case StridePixelFormat.B8G8R8X8_UNorm:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 32;
+ redMask = FreeImage.FI_RGBA_BLUE_MASK;
+ greenMask = FreeImage.FI_RGBA_GREEN_MASK;
+ blueMask = FreeImage.FI_RGBA_RED_MASK;
+ break;
+
+ case StridePixelFormat.B5G6R5_UNorm:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 16;
+ redMask = FreeImage.FI16_565_RED_MASK;
+ greenMask = FreeImage.FI16_565_GREEN_MASK;
+ blueMask = FreeImage.FI16_565_BLUE_MASK;
+ break;
+ case StridePixelFormat.B5G5R5A1_UNorm:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 16;
+ redMask = FreeImage.FI16_555_RED_MASK;
+ greenMask = FreeImage.FI16_555_GREEN_MASK;
+ blueMask = FreeImage.FI16_555_BLUE_MASK;
+ break;
+ case StridePixelFormat.R16_Typeless:
+ case StridePixelFormat.R16_Float:
+ case StridePixelFormat.D16_UNorm:
+ case StridePixelFormat.R16_UNorm:
+ case StridePixelFormat.R16_SNorm:
+ type = FREE_IMAGE_TYPE.FIT_UINT16;
+ bpp = 16;
+ break;
+ case StridePixelFormat.R8G8_Typeless:
+ case StridePixelFormat.R8G8_UNorm:
+ case StridePixelFormat.R8G8_UInt:
+ case StridePixelFormat.R8G8_SNorm:
+ case StridePixelFormat.R8G8_SInt:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 16;
+ redMask = 0xFF00;
+ greenMask= 0x00FF;
+ break;
+ case StridePixelFormat.R8_Typeless:
+ case StridePixelFormat.R8_UNorm:
+ case StridePixelFormat.R8_UInt:
+ case StridePixelFormat.R8_SNorm:
+ case StridePixelFormat.R8_SInt:
+ case StridePixelFormat.A8_UNorm:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 8;
+ break;
+ case StridePixelFormat.R1_UNorm:
+ type = FREE_IMAGE_TYPE.FIT_BITMAP;
+ bpp = 1;
+ break;
+ default:
+ result = false;
+ break;
+ }
+
+ return result;
+ }
}
}
diff --git a/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj b/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj
index f04c66df33..bed695302c 100644
--- a/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj
+++ b/sources/tools/Stride.TextureConverter/Stride.TextureConverter.csproj
@@ -13,9 +13,6 @@
-
- runtimes\%(RecursiveDir)native\%(Filename)%(Extension)
-
runtimes\%(RecursiveDir)native\%(Filename)%(Extension)
@@ -25,6 +22,7 @@
+
\ No newline at end of file