Don't use ImageSharp for texture processing

- returned to System.Drawing
(ImageSharp is a good lib, but too slow for such app, IMO)
This commit is contained in:
VaDiM
2021-11-24 15:43:53 +02:00
parent 9cbe91decb
commit 571ea2da4a
6 changed files with 6039 additions and 70 deletions

View File

@ -1,31 +1,34 @@
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.IO;
namespace AssetStudio
{
public static class Texture2DExtensions
{
public static Image ConvertToImage(this Texture2D m_Texture2D, bool flip)
public static Bitmap ConvertToBitmap(this Texture2D m_Texture2D, bool flip)
{
var converter = new Texture2DConverter(m_Texture2D);
var bytes = converter.DecodeTexture2D();
if (bytes != null && bytes.Length > 0)
{
var image = Image.LoadPixelData<Bgra32>(bytes, m_Texture2D.m_Width, m_Texture2D.m_Height);
var bitmap = new Bitmap(m_Texture2D.m_Width, m_Texture2D.m_Height, PixelFormat.Format32bppArgb);
var bmpData = bitmap.LockBits(new Rectangle(0, 0, m_Texture2D.m_Width, m_Texture2D.m_Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
Marshal.Copy(bytes, 0, bmpData.Scan0, bytes.Length);
bitmap.UnlockBits(bmpData);
if (flip)
{
image.Mutate(x => x.Flip(FlipMode.Vertical));
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
}
return image;
return bitmap;
}
return null;
}
public static MemoryStream ConvertToStream(this Texture2D m_Texture2D, ImageFormat imageFormat, bool flip)
{
var image = ConvertToImage(m_Texture2D, flip);
var image = ConvertToBitmap(m_Texture2D, flip);
if (image != null)
{
using (image)