How to take a screenshot and save to file as jpg?

Total Post:183

C#  Android 
 1705  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.
  1. Post:104

    Re: How to take a screenshot and save to file as jpg?

    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", 
                                 width, height, 
        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);
       = rt;
                screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0);
                camera.targetTexture = null;
       = null; // JC: added to avoid errors
                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() 

      Modified On Apr-06-2018 12:45:23 AM