有没有办法获得玩家的照片,然后为精灵或其他东西裁剪脸部? 就像将脸部添加到身体的应用程序一样,脸部也会以某种方式存储。
答案 0 :(得分:0)
在this question回答后,您可以从Android相机检索图片并将其另存为纹理。然后你使用一个 Texture2D 包含你的面具(让我们用中间的圆圈表示围绕它的alpha)来检查你要保存哪个字节以及< em> byte 将是透明的。不要忘记将 Texture2D 导入属性设置为高级,然后选中读/写启用。最后,您可以使用Unity WWW 类或 System.IO.ReadAllBytes 将新创建的图片作为精灵加载。
以下是对此的快速实现:
[SerializeField]
private Texture2D maskTexture;
private WebCamTexture webCamTexture;
protected void Start()
{
GetComponent<RawImage>().rectTransform.sizeDelta = new Vector2(maskTexture.width, maskTexture.height);
webCamTexture = new WebCamTexture();
GetComponent<Renderer>().material.mainTexture = webCamTexture;
webCamTexture.Play();
}
public void SavePicture()
{
StartCoroutine(SavePictureCoroutine());
}
private IEnumerator SavePictureCoroutine()
{
yield return new WaitForEndOfFrame();
RawImage rawImageToRead = GetComponent<RawImage>();
//This is to save the current RenderTexture: RenderTexture.GetTemporary() and RenderTexture.ReleaseTemporary() can also be used
RenderTexture previousRenderTexture = RenderTexture.active;
RenderTexture.active = rawImageToRead.texture as RenderTexture;
Texture2D renderedTexture = new Texture2D(maskTexture.width, maskTexture.height, TextureFormat.ARGB32, false);
renderedTexture.ReadPixels(new Rect(Screen.width * 0.5f - maskTexture.width * 0.5f, Screen.height * 0.5f - maskTexture.height * 0.5f, renderedTexture.width, renderedTexture.height), 0, 0);
renderedTexture.Apply();
RenderTexture.active = previousRenderTexture;
//----
for(int i = 0; i < renderedTexture.width; i++)
{
for(int j = 0; j < renderedTexture.height; j++)
{
if(maskTexture.GetPixel(i, j).a > 0.5f)
{
renderedTexture.SetPixel(i, j, renderedTexture.GetPixel(i, j));
}
else
{
renderedTexture.SetPixel(i, j, new Color(0.0f, 0.0f, 0.0f, 0.0f));
}
}
}
renderedTexture.Apply();
yield return renderedTexture;
File.WriteAllBytes(Path.Combine(Application.dataPath, "YOUR_FILE_NAME"), renderedTexture.EncodeToPNG());
}
(警告:未经测试的代码)
另外请记住在提出问题之前尝试提供您已经尝试过的内容:它可以帮助其他用户了解您希望实现的目标和方式。
希望这有帮助,