Textur2D and Filestream conversion

below is the code I am trying to modify.

static byte[] GetImageAsByteArray(string imageFilePath)
        {
            // Open a read-only file stream for the specified file.
            using (FileStream fileStream =
                new FileStream(imageFilePath, FileMode.Open, FileAccess.Read))
            {
                // Read the file's contents into a byte array.
                BinaryReader binaryReader = new BinaryReader(fileStream);
                return binaryReader.ReadBytes((int)fileStream.Length);
            }
        }
    }

As you can see this code uses a file path. I want to pass an image Texture2D into the method like below:

static byte[] GetImageAsByteArray(Texture2D image)

How do I get the same output as the filestream method but using texture2d. Below is my attempt at it:

static byte[] GetImageAsByteArray(Texture2D image)
{
    /* Open a read-only file stream for the specified file.
    using (FileStream fileStream =
        new FileStream(imageFilePath, FileMode.Open, FileAccess.Read))
        */
    {
        // Read the file's contents into a byte array.
        Debug.Log("MADE IT TO GETIMAGESBYTEARR");
       return binaryReader.ReadBytes(image.GetRawTextureData());

    }
}

You seem to have trouble understanding what kind of data you actually handle here. A file on disk has a particular file format. For example image files may be stored as JPG, PNG, TIF, BMP, … Each of those formats is fundamentally different from each other. Some are lossy some lossless, some are compressed some are not.

A Texture2D object is an image object in memory, optimised for GPU memory so it can be used by your GPU.

If you just want to convert a Texture2D into a common file format you probably want to use EncodeToPNG or one of the other supported formats. Note as you can read in the documentation the Texture2D need to have read / write enabled. So if you imported the image in Unity you have to change that in order to actually read the content of the image.

ps: Your first method is kind of redundant as System.IO.File.ReadAllBytes does already what you did there in one line.