Home > DeveloperSection > Forums > How to take a screenshot and save to file as jpg?
Ankita Pandey
Ankita Pandey

Total Post:183

Points:1285
Posted on    October-16-2014 11:49 PM

 C# C#  Android 
Ratings:


 1 Reply(s)
 808  View(s)
Rate this:
I am trying to Take a screencapture and save it to a file in jpg format.
This is what I have so far:

    string jpgFile = Application.persistentDataPath + "/scrn-1.jpg";
    Texture2D tex = new Texture2D (Screen.width, Screen.height);
    tex.ReadPixels (new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    tex.Apply ();
    var bytes = tex.EncodeToJPG();
    Destroy (tex);
    System.IO.File.WriteAllBytes(jpgFile, bytes);
I have found that running this in Unity on iOS gives me:

JPEG parameter struct mismatch: library thinks size is 372, caller expects 360

However if I change the conversion to tex.EncodeToPNG(); and change the file name to .png everything works fine. I am not sure how to proceed any assistance would be appreciated. Thanks.


marcel ethan
marcel ethan

Total Post:105

Points:735
Posted on    October-16-2014 11:51 PM

I found this, which lets you save it as .jpg. I normally just use capture screen and save as .png.

Here you go:

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;

        }

    }

}

If you just want any kind of picture I highly recommend this:


using UnityEngine;

using System.Collections;

public class ExampleClass : MonoBehaviour 

{

    void OnMouseDown() 

    {

        Application.CaptureScreenshot("Screenshot.png");

    }

}


Don't want to miss updates? Please click the below button!

Follow MindStick