示例#1
0
        public static void SaveAsRaw(int size, CBUtility.Channels channels, string fileName, string filePath, RenderTexture rtex, ComputeShader readDataComputeShader)
        {
            var channelsSize = (byte)channels;
            var buffer       = new ComputeBuffer(size, sizeof(float) * channelsSize);

            CBUtility.ReadFromRenderTexture(rtex, channels, buffer, readDataComputeShader);

            var data = new float[size * channelsSize];

            buffer.GetData(data);

            var byteArray = new byte[size * 4 * channelsSize];

            Buffer.BlockCopy(data, 0, byteArray, 0, byteArray.Length);
            File.WriteAllBytes(Application.dataPath + filePath + fileName + ".raw", byteArray);

            buffer.Release();
        }
示例#2
0
        public static void SaveAs8bit(int width, int height, CBUtility.Channels channels, string fileName, string filePath, RenderTexture rtex, ComputeShader readDataComputeShader, float scale = 1.0f)
        {
            var channelsSize = (byte)channels;
            var buffer       = new ComputeBuffer(width * height, sizeof(float) * channelsSize);

            CBUtility.ReadFromRenderTexture(rtex, channels, buffer, readDataComputeShader);

            var data = new float[width * height * channelsSize];

            buffer.GetData(data);

            var texture = new Texture2D(width, height);

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    var color = new Color(0, 0, 0, 1);

                    color.r = data[(x + y * width) * channelsSize + 0];

                    if (channelsSize > 1)
                    {
                        color.g = data[(x + y * width) * channelsSize + 1];
                    }

                    if (channelsSize > 2)
                    {
                        color.b = data[(x + y * width) * channelsSize + 2];
                    }

                    texture.SetPixel(x, y, color * scale);
                }
            }

            texture.Apply();

            var bytes = texture.EncodeToPNG();

            File.WriteAllBytes(Application.dataPath + filePath + fileName + ".png", bytes);

            buffer.Release();
        }