ReadPixels returns empty texture
I try to make a screenshot and put it into a texture to use it in my app(I do not need to save ot somewhere on disc). I am trying to use ReadPixels without RenderTexture, because with RenderTexture it returns a low-quality image, and I need a perfect representation of what's on the screen. I have two cameras in my scene, and two canvases attached to these cameras(each canvas is attached to different cameras), and cameras have different culling masks, so one camera renders background, another renders other dinamically created UI image objects. So, here's my code:
IEnumerator OnPostRender()
{
yield return new WaitForEndOfFrame();
Texture2D snapshot = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);
snapshot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
snapshot.Apply();
myImage.GetComponent<Image>().sprite = Sprite.Create(snapshot, new Rect(0, 0, snapshot.width, snapshot.height), Vector2.zero);
}
I am calling this function in LateUpdate with a line StartCoroutine(OnPostRender());
, but the function gives me an empty texture with current screen resolution. Even if I change my scene so that both canvases are rendered in the main camera and the second camera is off, the texture is still empty. What am I doing wrong?
I know this is an old post. But do you get this problem on a phone or is it in the editor as well?
We have a similar issue only on some specific phones (Galaxy Note 4) and we believe it has to do with Antialiasing.
Your answer
Follow this Question
Related Questions
Texture2D.ReadPixels doesn't capture image effects. 1 Answer
camera.ReadPixels creating ugly textures 0 Answers
How to ReadPixels from square area right in the middle of the screen? 1 Answer
Unity3d Texture2D.ReadPixels problem when convert to sprite. 0 Answers
ReadPixels - Screen.Width/Height in not maximized editor mode give unreliable results 0 Answers