FlatRedBall.Graphics.Texture.ImageData.ApplyColorOperation C# (CSharp) Метод

ApplyColorOperation() публичный Метод

public ApplyColorOperation ( ColorOperation colorOperation, System.Drawing.Color appliedColor ) : void
colorOperation ColorOperation
appliedColor System.Drawing.Color
Результат void
        public void ApplyColorOperation(ColorOperation colorOperation, Color appliedColor)
        {

            Color baseColor;

            switch (colorOperation)
            {

                case ColorOperation.Add:
                    for (int x = 0; x < Width; x++)
                    {
                        for (int y = 0; y < height; y++)
                        {
                            baseColor = GetPixelColor(x, y);
#if FRB_MDX
                            // System.Drawing.Color doesn't have setters for A, R, G, B
                            // so we have to do it a more inefficient way in FRB MDX
                            Color combinedColor = Color.FromArgb(
                                baseColor.A,
                                (byte)System.Math.Min((baseColor.R + appliedColor.R), 255),
                                (byte)System.Math.Min((baseColor.G + appliedColor.G), 255),
                                (byte)System.Math.Min((baseColor.B + appliedColor.B), 255));
                            baseColor = combinedColor;
#elif XNA4
                            baseColor.R = (byte)(System.Math.Min((baseColor.R + appliedColor.R), 255) * baseColor.A / 255);
                            baseColor.G = (byte)(System.Math.Min((baseColor.G + appliedColor.G), 255) * baseColor.A / 255);
                            baseColor.B = (byte)(System.Math.Min((baseColor.B + appliedColor.B), 255) * baseColor.A / 255);
#else
                            baseColor.R = (byte)System.Math.Min((baseColor.R + appliedColor.R), 255);
                            baseColor.G = (byte)System.Math.Min((baseColor.G + appliedColor.G), 255);
                            baseColor.B = (byte)System.Math.Min((baseColor.B + appliedColor.B), 255);
#endif
                            SetPixel(x, y, baseColor);
                        }
                    }
                    break;

                case ColorOperation.Modulate:

                    // Justin Johnson - May 15, 2012 - pre-multiply so we don't calculate every iteration (Justin 5/15/2012)
                    float red = appliedColor.R / 255f;
                    float green = appliedColor.G / 255f;
                    float blue = appliedColor.B / 255f;

                    for (int x = 0; x < Width; x++)
                    {
                        for (int y = 0; y < height; y++)
                        {
                            baseColor = GetPixelColor(x, y);
#if FRB_MDX
                            // System.Drawing.Color doesn't have setters for A, R, G, B
                            // so we have to do it a more inefficient way in FRB MDX
                            Color combinedColor = Color.FromArgb(
                                baseColor.A,
                                (byte)(baseColor.R * red),
                                (byte)(baseColor.G * green),
                                (byte)(baseColor.B * blue));
                            baseColor = combinedColor;
#else
                            baseColor.R = (byte)(baseColor.R * red);
                            baseColor.G = (byte)(baseColor.G * green);
                            baseColor.B = (byte)(baseColor.B * blue);
#endif
                            SetPixel(x, y, baseColor);
                        }
                    }
                    break;

                case ColorOperation.Texture:
                    // no-op
                    break;

                default:
                    throw new NotImplementedException();
            }
        }

Same methods

ImageData::ApplyColorOperation ( ColorOperation colorOperation, float red, float green, float blue, float alpha ) : void