mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
parent
41a79f485f
commit
8b048b9e1e
@ -532,10 +532,6 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
else if (obj is SpriteAtlas m_SpriteAtlas)
|
else if (obj is SpriteAtlas m_SpriteAtlas)
|
||||||
{
|
{
|
||||||
if (m_SpriteAtlas.m_IsVariant)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
foreach (var m_PackedSprite in m_SpriteAtlas.m_PackedSprites)
|
foreach (var m_PackedSprite in m_SpriteAtlas.m_PackedSprites)
|
||||||
{
|
{
|
||||||
if (m_PackedSprite.TryGet(out var m_Sprite))
|
if (m_PackedSprite.TryGet(out var m_Sprite))
|
||||||
@ -544,6 +540,14 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
m_Sprite.m_SpriteAtlas.Set(m_SpriteAtlas);
|
m_Sprite.m_SpriteAtlas.Set(m_SpriteAtlas);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_Sprite.m_SpriteAtlas.TryGet(out var m_SpriteAtlaOld);
|
||||||
|
if (m_SpriteAtlaOld.m_IsVariant)
|
||||||
|
{
|
||||||
|
m_Sprite.m_SpriteAtlas.Set(m_SpriteAtlas);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,32 +19,38 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (m_SpriteAtlas.m_RenderDataMap.TryGetValue(m_Sprite.m_RenderDataKey, out var spriteAtlasData) && spriteAtlasData.texture.TryGet(out var m_Texture2D))
|
if (m_SpriteAtlas.m_RenderDataMap.TryGetValue(m_Sprite.m_RenderDataKey, out var spriteAtlasData) && spriteAtlasData.texture.TryGet(out var m_Texture2D))
|
||||||
{
|
{
|
||||||
return CutImage(m_Texture2D, m_Sprite, spriteAtlasData.textureRect, spriteAtlasData.textureRectOffset, spriteAtlasData.settingsRaw);
|
return CutImage(m_Sprite, m_Texture2D, spriteAtlasData.textureRect, spriteAtlasData.textureRectOffset, spriteAtlasData.downscaleMultiplier, spriteAtlasData.settingsRaw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_Sprite.m_RD.texture.TryGet(out var m_Texture2D))
|
if (m_Sprite.m_RD.texture.TryGet(out var m_Texture2D))
|
||||||
{
|
{
|
||||||
return CutImage(m_Texture2D, m_Sprite, m_Sprite.m_RD.textureRect, m_Sprite.m_RD.textureRectOffset, m_Sprite.m_RD.settingsRaw);
|
return CutImage(m_Sprite, m_Texture2D, m_Sprite.m_RD.textureRect, m_Sprite.m_RD.textureRectOffset, m_Sprite.m_RD.downscaleMultiplier, m_Sprite.m_RD.settingsRaw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Image<Bgra32> CutImage(Texture2D m_Texture2D, Sprite m_Sprite, Rectf textureRect, Vector2 textureRectOffset, SpriteSettings settingsRaw)
|
private static Image<Bgra32> CutImage(Sprite m_Sprite, Texture2D m_Texture2D, Rectf textureRect, Vector2 textureRectOffset, float downscaleMultiplier, SpriteSettings settingsRaw)
|
||||||
{
|
{
|
||||||
var originalImage = m_Texture2D.ConvertToImage(false);
|
var originalImage = m_Texture2D.ConvertToImage(false);
|
||||||
if (originalImage != null)
|
if (originalImage != null)
|
||||||
{
|
{
|
||||||
using (originalImage)
|
using (originalImage)
|
||||||
{
|
{
|
||||||
|
if (downscaleMultiplier > 0f && downscaleMultiplier != 1f)
|
||||||
|
{
|
||||||
|
var width = (int)(m_Texture2D.m_Width / downscaleMultiplier);
|
||||||
|
var height = (int)(m_Texture2D.m_Height / downscaleMultiplier);
|
||||||
|
originalImage.Mutate(x => x.Resize(width, height));
|
||||||
|
}
|
||||||
var rectX = (int)Math.Floor(textureRect.x);
|
var rectX = (int)Math.Floor(textureRect.x);
|
||||||
var rectY = (int)Math.Floor(textureRect.y);
|
var rectY = (int)Math.Floor(textureRect.y);
|
||||||
var rectRight = (int)Math.Ceiling(textureRect.x + textureRect.width);
|
var rectRight = (int)Math.Ceiling(textureRect.x + textureRect.width);
|
||||||
var rectBottom = (int)Math.Ceiling(textureRect.y + textureRect.height);
|
var rectBottom = (int)Math.Ceiling(textureRect.y + textureRect.height);
|
||||||
rectRight = Math.Min(rectRight, m_Texture2D.m_Width);
|
rectRight = Math.Min(rectRight, originalImage.Width);
|
||||||
rectBottom = Math.Min(rectBottom, m_Texture2D.m_Height);
|
rectBottom = Math.Min(rectBottom, originalImage.Height);
|
||||||
var rect = new Rectangle(rectX, rectY, rectRight - rectX, rectBottom - rectY);
|
var rect = new Rectangle(rectX, rectY, rectRight - rectX, rectBottom - rectY);
|
||||||
var spriteImage = originalImage.Clone(x => x.Crop(rect));
|
var spriteImage = originalImage.Clone(x => x.Crop(rect));
|
||||||
if (settingsRaw.packed == 1)
|
if (settingsRaw.packed == 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user