mirror of
https://github.com/aelurum/AssetStudio.git
synced 2026-11-14 11:18:47 -05:00
Some fixes for image converters
This commit is contained in:
@@ -25,7 +25,11 @@ namespace AssetStudioGUI
|
||||
Width = texture2D.m_Width;
|
||||
Height = texture2D.m_Height;
|
||||
var converter = new Texture2DConverter(texture2D);
|
||||
Bits = BigArrayPool<byte>.Shared.Rent(converter.OutputDataSize);
|
||||
var dataSize = converter.GetImageDataSize();
|
||||
if (dataSize <= 0)
|
||||
return;
|
||||
|
||||
Bits = BigArrayPool<byte>.Shared.Rent(dataSize);
|
||||
if (converter.GetBgra32RawImageData(Bits, flip))
|
||||
{
|
||||
m_handle = GCHandle.Alloc(Bits, GCHandleType.Pinned);
|
||||
@@ -42,7 +46,11 @@ namespace AssetStudioGUI
|
||||
m_bitmap.Dispose();
|
||||
m_handle.Free();
|
||||
}
|
||||
BigArrayPool<byte>.Shared.Return(Bits);
|
||||
if (Bits != null)
|
||||
{
|
||||
BigArrayPool<byte>.Shared.Return(Bits);
|
||||
Bits = null;
|
||||
}
|
||||
}
|
||||
m_bitmap = null;
|
||||
}
|
||||
@@ -55,7 +63,7 @@ namespace AssetStudioGUI
|
||||
public int Height { get; }
|
||||
public int Width { get; }
|
||||
public int Stride => Width * 4;
|
||||
public byte[] Bits { get; }
|
||||
public byte[] Bits { get; private set; }
|
||||
public Bitmap Bitmap => m_bitmap;
|
||||
|
||||
private Bitmap m_bitmap;
|
||||
|
||||
@@ -28,8 +28,8 @@ namespace AssetStudio
|
||||
private float downscaleMultiplier;
|
||||
private SpriteSettings settingsRaw;
|
||||
private bool keepSpriteSize;
|
||||
private int resultWidth;
|
||||
private int resultHeight;
|
||||
private int resultWidth = -1;
|
||||
private int resultHeight = -1;
|
||||
private bool canConvert;
|
||||
|
||||
public readonly Texture2D m_Texture2D;
|
||||
@@ -51,11 +51,7 @@ namespace AssetStudio
|
||||
textureRectOffset = spriteAtlasData.textureRectOffset;
|
||||
downscaleMultiplier = spriteAtlasData.downscaleMultiplier;
|
||||
settingsRaw = spriteAtlasData.settingsRaw;
|
||||
SetResultSpriteSize();
|
||||
if (resultWidth > 0 && resultHeight > 0)
|
||||
{
|
||||
canConvert = true;
|
||||
}
|
||||
canConvert = SetResultSpriteSize();
|
||||
}
|
||||
}
|
||||
if (!canConvert && m_Sprite.m_RD.texture.TryGet(out m_Texture2D))
|
||||
@@ -65,22 +61,26 @@ namespace AssetStudio
|
||||
textureRectOffset = m_Sprite.m_RD.textureRectOffset;
|
||||
downscaleMultiplier = m_Sprite.m_RD.downscaleMultiplier;
|
||||
settingsRaw = m_Sprite.m_RD.settingsRaw;
|
||||
SetResultSpriteSize();
|
||||
if (resultWidth > 0 && resultHeight > 0)
|
||||
{
|
||||
canConvert = true;
|
||||
}
|
||||
canConvert = SetResultSpriteSize();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetResultSpriteSize()
|
||||
private bool SetResultSpriteSize()
|
||||
{
|
||||
if (sprite.m_Rect.width <= 0 || textureRect.width <= 0 || sprite.m_Rect.height <= 0 || textureRect.height <= 0)
|
||||
{
|
||||
(resultWidth, resultHeight) = (0, 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
resultWidth = keepSpriteSize
|
||||
? (int)MathF.Round(sprite.m_Rect.width)
|
||||
: (int)MathF.Round(textureRect.width);
|
||||
resultHeight = keepSpriteSize
|
||||
? (int)MathF.Round(sprite.m_Rect.height)
|
||||
: (int)MathF.Round(textureRect.height);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryConvertToImage(out Image<Bgra32> spriteImage, SpriteMaskMode maskMode)
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace AssetStudio
|
||||
private int gobsPerBlock;
|
||||
private Size blockSize;
|
||||
|
||||
public int OutputDataSize => outputDataSize;
|
||||
public int GetImageDataSize() => outputDataSize;
|
||||
|
||||
public Texture2DConverter(Texture2D m_Texture2D)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user