- Home /
 
Capturing screenshot with transparent background in 4.3, 2d project
I'm trying to render the scene to a png with a transparent background, however, I can't even get the screenshots to show right. I have it added to the camera but all I get is a grey screenshot
I get 2 errors: ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame. UnityEngine.Texture2D:ReadPixels(Rect, Int32, Int32) HiResScreenShots:LateUpdate() (at Assets/HiResScreenShots.cs:29)
and: Trying to read pixel out of bounds
I found the code from this question
 using UnityEngine;
 using System.Collections;
 
 public class HiResScreenShots : MonoBehaviour {
     public int resWidth = 2550; 
     public int resHeight = 3300;
     
     private bool takeHiResShot = false;
     
     public static string ScreenShotName(int width, int height) {
         return string.Format("{0}/Screenshots/screen_{1}x{2}_{3}.png", 
                              Application.dataPath, 
                              width, height, 
                              System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
     }
     
     public void TakeHiResShot() {
         takeHiResShot = true;
     }
     
     void LateUpdate() {
         takeHiResShot |= Input.GetKeyDown("k");
         if (takeHiResShot) {
             RenderTexture rt = new RenderTexture(resWidth, resHeight, 24);
             camera.targetTexture = rt;
             Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false);
             camera.Render();
             RenderTexture.active = rt;
             screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0);
             camera.targetTexture = null;
             RenderTexture.active = null; // JC: added to avoid errors
             Destroy(rt);
             byte[] bytes = screenShot.EncodeToPNG();
             string filename = ScreenShotName(resWidth, resHeight);
             System.IO.File.WriteAllBytes(filename, bytes);
             Debug.Log(string.Format("Took screenshot to: {0}", filename));
             takeHiResShot = false;
         }
     }
 }
 
 
               I'm unsure what I'm doing wrong, any help would be appreciated
so you wnat to take a screen shot without seeing the background?
Yes, I've read that you can make it so the background is transparent when you render the scene to png, however, I haven't even been able to get the screenshot to show anything
Answer by Kamil1064 · Jan 25, 2016 at 05:41 PM
If you want that result: http://imgur.com/YUnbOvT (it has alpha channel) you may do this with Renderator http://forum.unity3d.com/threads/renderator.381844/
Your answer
 
             Follow this Question
Related Questions
System.IO.File error, take a screenShot 2 Answers
Capture Screenshot not working in WebGL 1 Answer
4.3 - Errors jump to the wrong line numbers 1 Answer
the problem of touch screen logic 1 Answer
Help with Unity's Parallax Scrolling Script Object reference not set to an instance of an object 1 Answer