Created unity project
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.UI.Avatar
|
||||
{
|
||||
internal static class ApplyCircleMask
|
||||
{
|
||||
internal static Texture2D For(Texture2D sourceImage)
|
||||
{
|
||||
int centerx = sourceImage.width / 2;
|
||||
int centery = sourceImage.height / 2;
|
||||
|
||||
int radius = sourceImage.width / 2;
|
||||
|
||||
Texture2D result = Images.GetNewTextureFromTexture(sourceImage);
|
||||
|
||||
for (int i = (centerx - radius); i < centerx + radius; i++)
|
||||
{
|
||||
for (int j = (centery - radius); j < centery + radius; j++)
|
||||
{
|
||||
float dx = i - centerx;
|
||||
float dy = j - centery;
|
||||
|
||||
float d = Mathf.Sqrt(dx * dx + dy * dy);
|
||||
|
||||
float borderSize = 1f;
|
||||
|
||||
if (d <= (radius - borderSize))
|
||||
{
|
||||
result.SetPixel(
|
||||
i - (centerx - radius),
|
||||
j - (centery - radius),
|
||||
sourceImage.GetPixel(i, j));
|
||||
continue;
|
||||
}
|
||||
|
||||
Color color = sourceImage.GetPixel(i, j);
|
||||
|
||||
result.SetPixel(
|
||||
i - (centerx - radius),
|
||||
j - (centery - radius),
|
||||
Color.Lerp(Color.clear, color,
|
||||
GetAntialiasAlpha(radius, d, borderSize)));
|
||||
}
|
||||
}
|
||||
|
||||
result.Apply();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static float GetAntialiasAlpha(float radius, float d, float borderSize)
|
||||
{
|
||||
if (d >= (radius + borderSize))
|
||||
return 0f;
|
||||
|
||||
if (d - radius - borderSize == 0)
|
||||
return 0;
|
||||
|
||||
float proportion =
|
||||
Mathf.Abs(d - radius - borderSize) /
|
||||
(radius + borderSize) - (radius - borderSize);
|
||||
|
||||
return Mathf.Max(0, 1.0f - proportion);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user