public void ReadFromFile()
        {
            var path = EditorUtility.OpenFilePanel("Load graded file", _settings.FilePath ?? "", "png");

            if (!string.IsNullOrEmpty(path))
            {
                _settings.FilePath = path;

                if (File.Exists(_settings.FilePath))
                {
                    var data = File.ReadAllBytes(_settings.FilePath);

                    var screenshottexture = new Texture2D(16, 16, TextureFormat.ARGB32, false);
                    screenshottexture.LoadImage(data);

                    var imageResult = ImageResult.FromTexture(screenshottexture);

                    if (imageResult != null)
                    {
                        LUTResult lutResult = imageResult.GetLUT(_settings.LUT);

                        if (lutResult != null)
                        {
                            _lutWriter.SaveLUT(lutResult);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        public bool SendImage(ImageResult imageResult)
        {
            if (imageResult == null)
            {
                return(false);
            }

            _photoshopProtocol.SendImage(imageResult);

            return(true);
        }
Exemplo n.º 3
0
        public void Reload()
        {
            if (string.IsNullOrEmpty(_settings.FilePath))
            {
                ReadFromFile();
                return;
            }

            if (File.Exists(_settings.FilePath))
            {
                var data = File.ReadAllBytes(_settings.FilePath);

                var screenshottexture = new Texture2D(16, 16, TextureFormat.ARGB32, false);
                screenshottexture.LoadImage(data);

                var imageResult = ImageResult.FromTexture(screenshottexture);

                if (imageResult != null)
                {
                    LUTResult lutResult = imageResult.GetLUT(_settings.LUT);

                    if (lutResult != null)
                    {
                        _lutWriter.SaveLUT(lutResult);
                    }

                    lutResult.Release();
                }

                Texture2D.DestroyImmediate(screenshottexture);
            }
            else
            {
                if (EditorUtility.DisplayDialog("File doesnt exist", "Target file doesn't exit. Please select a new one.", "ok", "cancel"))
                {
                    ReadFromFile();
                    return;
                }
            }
        }
Exemplo n.º 4
0
        public bool ReadBackBuffer(out ImageResult imageResult)
        {
            imageResult = null;

            if (_cameras == null)
            {
                Debug.LogError("[AmplifyColor] Camera collection is invalid.");
                return(false);
            }

            var camera = _cameras.SelectedCamera;

            if (camera == null)
            {
                Debug.LogError("[AmplifyColor] Selected camera is invalid.");
                return(false);
            }

            AmplifyColorBase component            = camera.GetComponent <AmplifyColorBase>();
            Tonemapping      prevTonemapper       = Tonemapping.Disabled;
            float            prevExposure         = 1.0f;
            float            prevLinearWhitePoint = 11.2f;
            bool             prevApplyDithering   = false;
            float            prevBlendAmount      = 0.0f;
            Texture          prevLUT = null;

            if (component != null)
            {
                prevTonemapper       = component.Tonemapper;
                prevExposure         = component.Exposure;
                prevLinearWhitePoint = component.LinearWhitePoint;
                prevApplyDithering   = component.ApplyDithering;
                prevBlendAmount      = component.BlendAmount;
                prevLUT = component.LutTexture;

                component.Tonemapper       = ToolSettings.Instance.ApplyHDRControl ? component.Tonemapper : Tonemapping.Disabled;
                component.Exposure         = ToolSettings.Instance.ApplyHDRControl ? component.Exposure : 1.0f;
                component.LinearWhitePoint = ToolSettings.Instance.ApplyHDRControl ? component.LinearWhitePoint : 11.2f;
                component.ApplyDithering   = ToolSettings.Instance.ApplyHDRControl ? component.ApplyDithering : false;
                component.BlendAmount      = ToolSettings.Instance.ApplyColorGrading ? component.BlendAmount : 0.0f;
                component.LutTexture       = ToolSettings.Instance.ApplyColorGrading ? component.LutTexture : null;
            }

            var width  = ToolSettings.Instance.Resolution.TargetWidth;
            var height = ToolSettings.Instance.Resolution.TargetHeight;

            //if (ToolSettings.Instance.Resolution.IsGameWindowSize)
            //{
            //    width = Screen.width;
            //    height = Screen.height;
            //}

            var cameratarget = camera.targetTexture;

            var rt = RenderTexture.GetTemporary(width, height, 24, RenderTextureFormat.ARGB32);

            camera.targetTexture = rt;
            camera.Render();
            camera.targetTexture = cameratarget;

            var activert = RenderTexture.active;

            RenderTexture.active = rt;
            var text = new Texture2D(width, height, TextureFormat.ARGB32, false);

            text.ReadPixels(new Rect(0, 0, width, height), 0, 0);
            text.Apply();
            RenderTexture.active = activert;
            var colors = text.GetPixels(0, 0, width, height);

            Texture2D.DestroyImmediate(text);

            var colordata = new Color[width, height];

            for (int i = height - 1; i >= 0; i--)
            {
                for (int j = 0; j < width; j++)
                {
                    colordata[j, (height - 1 - i)]   = colors[i * width + j];
                    colordata[j, (height - 1 - i)].a = 1;
                }
            }

            if (component != null)
            {
                component.Tonemapper       = prevTonemapper;
                component.Exposure         = prevExposure;
                component.LinearWhitePoint = prevLinearWhitePoint;
                component.ApplyDithering   = prevApplyDithering;
                component.BlendAmount      = prevBlendAmount;
                component.LutTexture       = prevLUT;
            }

            imageResult = new ImageResult(colordata);

            return(true);
        }
		public string SendImage( ImageResult imageData )
		{
			if ( !_connection.Connect() )
			{
				return "Error connecting to Photoshop.";
			}

			var stream = _connection.Stream;

			int width = imageData.Width;
			int height = imageData.Height;

			string password = EditorPrefs.GetString( "AmplifyColor.NetworkPassword", "password" );
			_encryptDecrypt = new EncryptDecrypt( password );

			try
			{
				/* WRITE */
				var temp_stream = new MemoryStream();
				var w = new BinaryWriter( temp_stream );

				w.Write( SwapEndian( ProtocolVersion ) );
				w.Write( SwapEndian( _transactionId++ ) );
				w.Write( SwapEndian( ImageType ) );

				w.Write( ( byte ) 2 ); 				//imagetype (2 for PixMap);	
				w.Write( SwapEndian( width ) );
				w.Write( SwapEndian( height ) );
				w.Write( SwapEndian( width * 3 ) );	//bytesPerScanLine
				w.Write( ( byte ) 1 ); 				//color mode RGB
				w.Write( ( byte ) 3 ); 				//channel count
				w.Write( ( byte ) 8 ); 				//bits per channel

				var data = imageData.GenerateRGBData();
				w.Write( data, 0, data.Length );
				w.Flush();

				long len = temp_stream.Length;
				temp_stream.Seek( 0, SeekOrigin.Begin );
				BinaryReader r = new BinaryReader( temp_stream );
				var message = new byte[ len ];
				r.Read( message, 0, ( int ) len );

				var encryptedMessage = _encryptDecrypt.encrypt( message );
				int messageLength = CommLength + encryptedMessage.Length;

				stream.Write( BitConverter.GetBytes( messageLength ).Reverse().ToArray(), 0, 4 );
				stream.Write( BitConverter.GetBytes( NoCommError ).Reverse().ToArray(), 0, 4 );
				stream.Write( encryptedMessage, 0, encryptedMessage.Length );

				// Photoshop CS6 will issue a response, make sure we skip it (small timeout)
				DateTime start = DateTime.Now;
				while ( ( DateTime.Now - start ).TotalMilliseconds < 100 )
				{
					if ( !stream.DataAvailable )
						continue;

					var buf = new byte[ 4 ];
					stream.Read( buf, 0, 4 );
					int length = BitConverter.ToInt32( buf.Reverse().ToArray(), 0 );

					buf = new byte[ length ];
					stream.Read( buf, 0, length );
				}

				return "Sent";
			}
			catch ( Exception e )
			{
				//Debug.Log( e.Message );
				return e.Message;
			}
		}
		public string ReceiveImage( string documentName, out ImageResult imageData )
		{
			imageData = null;

			if ( !_connection.Connect() )
			{
				return "Error connecting to Photoshop.";
			}

			var stream = _connection.Stream;

			string password = EditorPrefs.GetString( "AmplifyColor.NetworkPassword", "password" );
			_encryptDecrypt = new EncryptDecrypt( password );

			var commandBuilder = new StringBuilder();

			if ( !string.IsNullOrEmpty( documentName ) )
			{
				commandBuilder.Append( "app.activeDocument = app.documents.getByName('" + documentName + "');\n" );
			}

			commandBuilder.Append( "var idNS = stringIDToTypeID('sendDocumentThumbnailToNetworkClient');\n" );
			commandBuilder.Append( "var desc1 = new ActionDescriptor();\n" );
			commandBuilder.Append( "desc1.putInteger( stringIDToTypeID('width'), app.activeDocument.width );\n" );
			commandBuilder.Append( "desc1.putInteger( stringIDToTypeID('height'), app.activeDocument.height );\n" );
			commandBuilder.Append( "desc1.putInteger( stringIDToTypeID('format'), 2 );\n" );
			commandBuilder.Append( "executeAction( idNS, desc1, DialogModes.NO );" );
			string command = commandBuilder.ToString();

			try
			{
				/* WRITE */
				byte[] strBytes = _utf8Encoding.GetBytes( command + "\n" );
				byte[] allBytes;

				using ( var memoryStream = new MemoryStream() )
				{
					BitConverter.GetBytes( ProtocolVersion );
					memoryStream.Write( BitConverter.GetBytes( ProtocolVersion ).Reverse().ToArray(), 0, 4 );
					_transactionId++;
					memoryStream.Write( BitConverter.GetBytes( _transactionId ).Reverse().ToArray(), 0, 4 );
					memoryStream.Write( BitConverter.GetBytes( JavascriptType ).Reverse().ToArray(), 0, 4 );
					memoryStream.Write( strBytes, 0, strBytes.Length );

					allBytes = memoryStream.GetBuffer().Take( ProtocolLength + strBytes.Length ).ToArray();
				}

				var encryptedBytes = _encryptDecrypt.encrypt( allBytes );

				int messageLength = CommLength + encryptedBytes.Length;

				stream.Write( BitConverter.GetBytes( messageLength ).Reverse().ToArray(), 0, 4 );
				stream.Write( BitConverter.GetBytes( NoCommError ).Reverse().ToArray(), 0, 4 );
				stream.Write( encryptedBytes, 0, encryptedBytes.Length );

				/* READ */
				DateTime start = DateTime.Now;
				int messageType = 0;
				while ( messageType != ImageType && ( DateTime.Now - start ).TotalMilliseconds < 1000 )
				{
					if ( !stream.DataAvailable )
						continue;

					var buffer = new byte[ 4 ];

					stream.Read( buffer, 0, 4 );
					buffer = buffer.Reverse().ToArray();
					int inLength = BitConverter.ToInt32( buffer, 0 );


					stream.Read( buffer, 0, 4 );
					buffer = buffer.Reverse().ToArray();
					int inComStatus = BitConverter.ToInt32( buffer, 0 );

					if ( inComStatus != 0 )
					{
						stream.Read( buffer, 0, 4 );
						buffer = buffer.Reverse().ToArray();
						//int inVersion = BitConverter.ToInt32(buffer, 0);

						stream.Read( buffer, 0, 4 );
						buffer = buffer.Reverse().ToArray();
						//int inTransaction = BitConverter.ToInt32(buffer, 0);

						stream.Read( buffer, 0, 4 );
						buffer = buffer.Reverse().ToArray();
						messageType = BitConverter.ToInt32( buffer, 0 );

						if ( messageType == JavascriptType || messageType == ErrorstringType )
						{
							inLength -= ProtocolLength;
							var bytemessage = new byte[ inLength + 1 ];
							int rr = stream.Read( bytemessage, 0, inLength );

							if ( rr > 0 )
							{
								var encoder = new UTF8Encoding();
								var message = encoder.GetString( bytemessage );
								return message.Trim( new[] { '\0' } );
							}
						}
						else
						{
							return "Message types: " + messageType;
						}
					}
					else
					{
						inLength = inLength - 4;

						var messageBytes = new List<byte>();
						var messagebuffer = new byte[ 1000 ];
						int totalread = 0;

						while ( totalread < inLength || stream.DataAvailable )
						{
							int bytesread = stream.Read( messagebuffer, 0, 1000 );
							totalread += bytesread;
							messageBytes.AddRange( messagebuffer.Take( bytesread ) );
						}

						IEnumerable<byte> decryptedBytes = _encryptDecrypt.decrypt( messageBytes.ToArray() );

						decryptedBytes = decryptedBytes.Skip( 4 );
						decryptedBytes = decryptedBytes.Skip( 4 );

						byte[] tempbytes = decryptedBytes.Take( 4 ).Reverse().ToArray();
						decryptedBytes = decryptedBytes.Skip( 4 );

						messageType = BitConverter.ToInt32( tempbytes, 0 );

						if ( messageType == ImageType )
							imageData = ImageResult.FromPhotoshopResult( decryptedBytes.ToArray() );
						else if ( messageType == ErrorstringType )
							return Encoding.UTF8.GetString( decryptedBytes.ToArray() );
					}
				}

				//return "Message types: " + messageType;
				return "Image Received";
			}
			catch ( Exception e )
			{
				return e.Message;
			}
		}
Exemplo n.º 7
0
		public bool SendImage( ImageResult imageResult )
		{
			if ( imageResult == null )
			{
				return false;
			}

			_photoshopProtocol.SendImage( imageResult );

			return true;
		}
        public string SendImage(ImageResult imageData)
        {
            if (!_connection.Connect())
            {
                return("Error connecting to Photoshop.");
            }

            var stream = _connection.Stream;

            int width  = imageData.Width;
            int height = imageData.Height;

            string password = EditorPrefs.GetString("AmplifyColor.NetworkPassword", "password");

            _encryptDecrypt = new EncryptDecrypt(password);

            try
            {
                /* WRITE */
                var temp_stream = new MemoryStream();
                var w           = new BinaryWriter(temp_stream);

                w.Write(SwapEndian(ProtocolVersion));
                w.Write(SwapEndian(_transactionId++));
                w.Write(SwapEndian(ImageType));

                w.Write(( byte )2);                                             //imagetype (2 for PixMap);
                w.Write(SwapEndian(width));
                w.Write(SwapEndian(height));
                w.Write(SwapEndian(width * 3));                         //bytesPerScanLine
                w.Write(( byte )1);                                     //color mode RGB
                w.Write(( byte )3);                                     //channel count
                w.Write(( byte )8);                                     //bits per channel

                var data = imageData.GenerateRGBData();
                w.Write(data, 0, data.Length);
                w.Flush();

                long len = temp_stream.Length;
                temp_stream.Seek(0, SeekOrigin.Begin);
                BinaryReader r       = new BinaryReader(temp_stream);
                var          message = new byte[len];
                r.Read(message, 0, ( int )len);

                var encryptedMessage = _encryptDecrypt.encrypt(message);
                int messageLength    = CommLength + encryptedMessage.Length;

                stream.Write(BitConverter.GetBytes(messageLength).Reverse().ToArray(), 0, 4);
                stream.Write(BitConverter.GetBytes(NoCommError).Reverse().ToArray(), 0, 4);
                stream.Write(encryptedMessage, 0, encryptedMessage.Length);

                // Photoshop CS6 will issue a response, make sure we skip it (small timeout)
                DateTime start = DateTime.Now;
                while ((DateTime.Now - start).TotalMilliseconds < 100)
                {
                    if (!stream.DataAvailable)
                    {
                        continue;
                    }

                    var buf = new byte[4];
                    stream.Read(buf, 0, 4);
                    int length = BitConverter.ToInt32(buf.Reverse().ToArray(), 0);

                    buf = new byte[length];
                    stream.Read(buf, 0, length);
                }

                return("Sent");
            }
            catch (Exception e)
            {
                //Debug.Log( e.Message );
                return(e.Message);
            }
        }
        public string ReceiveImage(string documentName, out ImageResult imageData)
        {
            imageData = null;

            if (!_connection.Connect())
            {
                return("Error connecting to Photoshop.");
            }

            var stream = _connection.Stream;

            string password = EditorPrefs.GetString("AmplifyColor.NetworkPassword", "password");

            _encryptDecrypt = new EncryptDecrypt(password);

            var commandBuilder = new StringBuilder();

            if (!string.IsNullOrEmpty(documentName))
            {
                commandBuilder.Append("app.activeDocument = app.documents.getByName('" + documentName + "');\n");
            }

            commandBuilder.Append("var idNS = stringIDToTypeID('sendDocumentThumbnailToNetworkClient');\n");
            commandBuilder.Append("var desc1 = new ActionDescriptor();\n");
            commandBuilder.Append("desc1.putInteger( stringIDToTypeID('width'), app.activeDocument.width );\n");
            commandBuilder.Append("desc1.putInteger( stringIDToTypeID('height'), app.activeDocument.height );\n");
            commandBuilder.Append("desc1.putInteger( stringIDToTypeID('format'), 2 );\n");
            commandBuilder.Append("executeAction( idNS, desc1, DialogModes.NO );");
            string command = commandBuilder.ToString();

            try
            {
                /* WRITE */
                byte[] strBytes = _utf8Encoding.GetBytes(command + "\n");
                byte[] allBytes;

                using (var memoryStream = new MemoryStream())
                {
                    BitConverter.GetBytes(ProtocolVersion);
                    memoryStream.Write(BitConverter.GetBytes(ProtocolVersion).Reverse().ToArray(), 0, 4);
                    _transactionId++;
                    memoryStream.Write(BitConverter.GetBytes(_transactionId).Reverse().ToArray(), 0, 4);
                    memoryStream.Write(BitConverter.GetBytes(JavascriptType).Reverse().ToArray(), 0, 4);
                    memoryStream.Write(strBytes, 0, strBytes.Length);

                    allBytes = memoryStream.GetBuffer().Take(ProtocolLength + strBytes.Length).ToArray();
                }

                var encryptedBytes = _encryptDecrypt.encrypt(allBytes);

                int messageLength = CommLength + encryptedBytes.Length;

                stream.Write(BitConverter.GetBytes(messageLength).Reverse().ToArray(), 0, 4);
                stream.Write(BitConverter.GetBytes(NoCommError).Reverse().ToArray(), 0, 4);
                stream.Write(encryptedBytes, 0, encryptedBytes.Length);

                /* READ */
                DateTime start       = DateTime.Now;
                int      messageType = 0;
                while (messageType != ImageType && (DateTime.Now - start).TotalMilliseconds < 1000)
                {
                    if (!stream.DataAvailable)
                    {
                        continue;
                    }

                    var buffer = new byte[4];

                    stream.Read(buffer, 0, 4);
                    buffer = buffer.Reverse().ToArray();
                    int inLength = BitConverter.ToInt32(buffer, 0);


                    stream.Read(buffer, 0, 4);
                    buffer = buffer.Reverse().ToArray();
                    int inComStatus = BitConverter.ToInt32(buffer, 0);

                    if (inComStatus != 0)
                    {
                        stream.Read(buffer, 0, 4);
                        buffer = buffer.Reverse().ToArray();
                        //int inVersion = BitConverter.ToInt32(buffer, 0);

                        stream.Read(buffer, 0, 4);
                        buffer = buffer.Reverse().ToArray();
                        //int inTransaction = BitConverter.ToInt32(buffer, 0);

                        stream.Read(buffer, 0, 4);
                        buffer      = buffer.Reverse().ToArray();
                        messageType = BitConverter.ToInt32(buffer, 0);

                        if (messageType == JavascriptType || messageType == ErrorstringType)
                        {
                            inLength -= ProtocolLength;
                            var bytemessage = new byte[inLength + 1];
                            int rr          = stream.Read(bytemessage, 0, inLength);

                            if (rr > 0)
                            {
                                var encoder = new UTF8Encoding();
                                var message = encoder.GetString(bytemessage);
                                return(message.Trim(new[] { '\0' }));
                            }
                        }
                        else
                        {
                            return("Message types: " + messageType);
                        }
                    }
                    else
                    {
                        inLength = inLength - 4;

                        var messageBytes  = new List <byte>();
                        var messagebuffer = new byte[1000];
                        int totalread     = 0;

                        while (totalread < inLength || stream.DataAvailable)
                        {
                            int bytesread = stream.Read(messagebuffer, 0, 1000);
                            totalread += bytesread;
                            messageBytes.AddRange(messagebuffer.Take(bytesread));
                        }

                        IEnumerable <byte> decryptedBytes = _encryptDecrypt.decrypt(messageBytes.ToArray());

                        decryptedBytes = decryptedBytes.Skip(4);
                        decryptedBytes = decryptedBytes.Skip(4);

                        byte[] tempbytes = decryptedBytes.Take(4).Reverse().ToArray();
                        decryptedBytes = decryptedBytes.Skip(4);

                        messageType = BitConverter.ToInt32(tempbytes, 0);

                        if (messageType == ImageType)
                        {
                            imageData = ImageResult.FromPhotoshopResult(decryptedBytes.ToArray());
                        }
                        else if (messageType == ErrorstringType)
                        {
                            return(Encoding.UTF8.GetString(decryptedBytes.ToArray()));
                        }
                    }
                }

                //return "Message types: " + messageType;
                return("Image Received");
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
Exemplo n.º 10
0
		public bool ReadBackBuffer( out ImageResult imageResult )
		{
			imageResult = null;

			if ( _cameras == null )
			{
				Debug.LogError( "[AmplifyColor] Camera collection is invalid." );
				return false;
			}

			var camera = _cameras.SelectedCamera;

			if ( camera == null )
			{
				Debug.LogError( "[AmplifyColor] Selected camera is invalid." );
				return false;
			}

            AmplifyColorBase component = camera.GetComponent<AmplifyColorBase>();
			float prevExposure = 1.0f;
			bool prevUseToneMapping = false;
			bool prevUseDithering = false;
			float prevBlendAmount = 0.0f;
			Texture prevLUT = null;

			if ( component != null )
			{
				prevExposure = component.Exposure;
				prevUseToneMapping = component.UseToneMapping;
				prevUseDithering = component.UseDithering;
				prevBlendAmount = component.BlendAmount;
				prevLUT = component.LutTexture;

				component.Exposure = ToolSettings.Instance.ApplyHDRControl ? component.Exposure : 1.0f;
				component.UseToneMapping = ToolSettings.Instance.ApplyHDRControl ? component.UseToneMapping : false;
				component.UseDithering = ToolSettings.Instance.ApplyHDRControl ? component.UseDithering : false;
				component.BlendAmount = ToolSettings.Instance.ApplyColorGrading ? component.BlendAmount : 0.0f;
				component.LutTexture = ToolSettings.Instance.ApplyColorGrading ? component.LutTexture : null;
			}

			var width = ToolSettings.Instance.Resolution.TargetWidth;
			var height = ToolSettings.Instance.Resolution.TargetHeight;

			//if (ToolSettings.Instance.Resolution.IsGameWindowSize)
			//{
			//    width = Screen.width;
			//    height = Screen.height;
			//}

			var cameratarget = camera.targetTexture;

			var rt = RenderTexture.GetTemporary( width, height, 24, RenderTextureFormat.ARGB32 );
			camera.targetTexture = rt;
			camera.Render();
			camera.targetTexture = cameratarget;

			var activert = RenderTexture.active;
			RenderTexture.active = rt;
			var text = new Texture2D( width, height, TextureFormat.ARGB32, false );
			text.ReadPixels( new Rect( 0, 0, width, height ), 0, 0 );
			text.Apply();
			RenderTexture.active = activert;
			var colors = text.GetPixels( 0, 0, width, height );
			Texture2D.DestroyImmediate( text );

			var colordata = new Color[ width, height ];

			for ( int i = height - 1; i >= 0; i-- )
			{
				for ( int j = 0; j < width; j++ )
				{
					colordata[ j, ( height - 1 - i ) ] = colors[ i * width + j ];
					colordata[ j, ( height - 1 - i ) ].a = 1;
				}
			}

			if ( component != null )
			{
				component.Exposure = prevExposure;
				component.UseToneMapping = prevUseToneMapping;
				component.UseDithering = prevUseDithering;
				component.BlendAmount = prevBlendAmount;
				component.LutTexture = prevLUT;
			}

			imageResult = new ImageResult( colordata );

			return true;
		}
		public bool ReadBackBuffer( out ImageResult imageResult )
		{
			imageResult = null;

			if ( _cameras == null )
			{
				Debug.LogError( "[AmplifyColor] Camera collection is invalid." );
				return false;
			}

			var camera = _cameras.SelectedCamera;

			if ( camera == null )
			{
				Debug.LogError( "[AmplifyColor] Selected camera is invalid." );
				return false;
			}

            var component = ( MonoBehaviour ) camera.GetComponent<AmplifyColorBase>();
			bool enabled = false;

			if ( !ToolSettings.Instance.ApplyLUT )
			{
				if ( component != null )
				{
					enabled = component.enabled;
					component.enabled = false;
				}
			}

			var width = ToolSettings.Instance.Resolution.TargetWidth;
			var height = ToolSettings.Instance.Resolution.TargetHeight;

			//if (ToolSettings.Instance.Resolution.IsGameWindowSize)
			//{
			//    width = Screen.width;
			//    height = Screen.height;
			//}

			var cameratarget = camera.targetTexture;

			var rt = RenderTexture.GetTemporary( width, height, 24, RenderTextureFormat.ARGB32 );
			camera.targetTexture = rt;
			camera.Render();
			camera.targetTexture = cameratarget;

			var activert = RenderTexture.active;
			RenderTexture.active = rt;
			var text = new Texture2D( width, height, TextureFormat.ARGB32, false );
			text.ReadPixels( new Rect( 0, 0, width, height ), 0, 0 );
			text.Apply();
			RenderTexture.active = activert;
			var colors = text.GetPixels( 0, 0, width, height );

			var colordata = new Color[ width, height ];

			for ( int i = height - 1; i >= 0; i-- )
			{
				for ( int j = 0; j < width; j++ )
				{
					colordata[ j, ( height - 1 - i ) ] = colors[ i * width + j ];
					colordata[ j, ( height - 1 - i ) ].a = 1;
				}
			}

			if ( !ToolSettings.Instance.ApplyLUT )
			{
				if ( component != null )
					component.enabled = enabled;
			}

			imageResult = new ImageResult( colordata );

			return true;
		}
        public bool ReadBackBuffer(out ImageResult imageResult)
        {
            imageResult = null;

            if (_cameras == null)
            {
                Debug.LogError("[AmplifyColor] Camera collection is invalid.");
                return(false);
            }

            var camera = _cameras.SelectedCamera;

            if (camera == null)
            {
                Debug.LogError("[AmplifyColor] Selected camera is invalid.");
                return(false);
            }

            var  component = ( MonoBehaviour )camera.GetComponent <AmplifyColorBase>();
            bool enabled   = false;

            if (!ToolSettings.Instance.ApplyLUT)
            {
                if (component != null)
                {
                    enabled           = component.enabled;
                    component.enabled = false;
                }
            }

            var width  = ToolSettings.Instance.Resolution.TargetWidth;
            var height = ToolSettings.Instance.Resolution.TargetHeight;

            //if (ToolSettings.Instance.Resolution.IsGameWindowSize)
            //{
            //    width = Screen.width;
            //    height = Screen.height;
            //}

            var cameratarget = camera.targetTexture;

            var rt = RenderTexture.GetTemporary(width, height, 24, RenderTextureFormat.ARGB32);

            camera.targetTexture = rt;
            camera.Render();
            camera.targetTexture = cameratarget;

            var activert = RenderTexture.active;

            RenderTexture.active = rt;
            var text = new Texture2D(width, height, TextureFormat.ARGB32, false);

            text.ReadPixels(new Rect(0, 0, width, height), 0, 0);
            text.Apply();
            RenderTexture.active = activert;
            var colors = text.GetPixels(0, 0, width, height);

            var colordata = new Color[width, height];

            for (int i = height - 1; i >= 0; i--)
            {
                for (int j = 0; j < width; j++)
                {
                    colordata[j, (height - 1 - i)]   = colors[i * width + j];
                    colordata[j, (height - 1 - i)].a = 1;
                }
            }

            if (!ToolSettings.Instance.ApplyLUT)
            {
                if (component != null)
                {
                    component.enabled = enabled;
                }
            }

            imageResult = new ImageResult(colordata);

            return(true);
        }