Exemple #1
0
        public static Bitmap createHSVPattern(Stream backgroundStream, MadScience.Colours.HSVColor backgroundColor)
        {
            Bitmap output = new Bitmap(256, 256, PixelFormat.Format32bppArgb);

            Bitmap background = LoadBitmapFromStream(backgroundStream, 256, 256);

            if (background == null)
            {
                return(output);
            }

            BitmapData outputData     = output.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData backgroundData = background.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            Color      outputColor;
            const int  pixelSize = 4;

            //process every pixel
            unsafe
            {
                for (int y = 0; y < 256; y++)
                {
                    byte *outputRow = (byte *)outputData.Scan0 + (y * outputData.Stride);
                    byte *inputRow  = (byte *)backgroundData.Scan0 + (y * backgroundData.Stride);

                    for (int x = 0; x < 256; x++)
                    {
                        int pixelLocation = x * pixelSize;

                        Color inputcolor = Color.FromArgb(255, inputRow[pixelLocation + 2], inputRow[pixelLocation + 1], inputRow[pixelLocation]);

                        MadScience.Colours.HSVColor bgcolor = new MadScience.Colours.HSVColor(inputcolor);
                        bgcolor.Hue        += backgroundColor.Hue;
                        bgcolor.Saturation += backgroundColor.Saturation;
                        bgcolor.Value      += backgroundColor.Value;
                        outputColor         = bgcolor.Color;

                        outputRow[pixelLocation]     = (byte)outputColor.B;
                        outputRow[pixelLocation + 1] = (byte)outputColor.G;
                        outputRow[pixelLocation + 2] = (byte)outputColor.R;
                        outputRow[pixelLocation + 3] = (byte)outputColor.A;
                    }
                }
            }
            output.UnlockBits(outputData);
            background.UnlockBits(backgroundData);

            return(output);
        }
        public static Bitmap createHSVPattern(Stream backgroundStream, Stream maskStream, MadScience.Colours.HSVColor backgroundColor, Stream channel1Stream, Stream channel2Stream, Stream channel3Stream, MadScience.Colours.HSVColor channel1Color, MadScience.Colours.HSVColor channel2Color, MadScience.Colours.HSVColor channel3Color, bool[] channelEnabled)
        {
            Bitmap output = new Bitmap(256, 256, PixelFormat.Format32bppArgb);

            Bitmap background = LoadBitmapFromStream(backgroundStream, 256, 256);
            Bitmap mask = LoadBitmapFromStream(maskStream, 256, 256);

            if (background == null || mask == null)
                return output;

            Bitmap channel1 = LoadBitmapFromStreamOrEmpty(channel1Stream, 256, 256);
            Bitmap channel2 = LoadBitmapFromStreamOrEmpty(channel2Stream, 256, 256);
            Bitmap channel3 = LoadBitmapFromStreamOrEmpty(channel3Stream, 256, 256);

            BitmapData outputData = output.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData backgroundData = background.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData maskData = mask.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData channel1Data = channel1.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData channel2Data = channel2.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData channel3Data = channel3.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            Color outputColor;
            const int pixelSize = 4;
            //process every pixel
            unsafe
            {
                for (int y = 0; y < 256; y++)
                {
                    byte* outputRow = (byte*)outputData.Scan0 + (y * outputData.Stride);
                    byte* inputRow = (byte*)backgroundData.Scan0 + (y * backgroundData.Stride);
                    byte* maskRow = (byte*)maskData.Scan0 + (y * maskData.Stride);
                    byte* channel1Row = (byte*)channel1Data.Scan0 + (y * channel1Data.Stride);
                    byte* channel2Row = (byte*)channel2Data.Scan0 + (y * channel2Data.Stride);
                    byte* channel3Row = (byte*)channel3Data.Scan0 + (y * channel3Data.Stride);

                    for (int x = 0; x < 256; x++)
                    {

                        int pixelLocation = x * pixelSize;

                        Color inputcolor = Color.FromArgb(255, inputRow[pixelLocation + 2], inputRow[pixelLocation + 1], inputRow[pixelLocation]);
                        Color maskcolor = Color.FromArgb(maskRow[pixelLocation + 3], maskRow[pixelLocation + 2], maskRow[pixelLocation + 1], maskRow[pixelLocation]);

                        MadScience.Colours.HSVColor bgcolor = new MadScience.Colours.HSVColor(inputcolor);
                        bgcolor.Hue += backgroundColor.Hue;
                        bgcolor.Saturation += backgroundColor.Saturation;
                        bgcolor.Value += backgroundColor.Value;
                        outputColor = bgcolor.Color;

                        if (maskcolor.G > 0 && channelEnabled[0])
                        {
                            Color channelcolor = Color.FromArgb(1, channel1Row[pixelLocation + 2], channel1Row[pixelLocation + 1], channel1Row[pixelLocation]);
                            bgcolor = new MadScience.Colours.HSVColor(channelcolor);
                            bgcolor.Hue += channel1Color.Hue;
                            bgcolor.Saturation += channel1Color.Saturation;
                            bgcolor.Value += channel1Color.Value;
                            outputColor = ColorOverlay(maskcolor.G, outputColor, bgcolor.Color);
                        }

                        if (maskcolor.B > 0 && channelEnabled[1])
                        {
                            Color channelcolor = Color.FromArgb(1, channel2Row[pixelLocation + 2], channel2Row[pixelLocation + 1], channel2Row[pixelLocation]);
                            bgcolor = new MadScience.Colours.HSVColor(channelcolor);
                            bgcolor.Hue += channel2Color.Hue;
                            bgcolor.Saturation += channel2Color.Saturation;
                            bgcolor.Value += channel2Color.Value;
                            outputColor = ColorOverlay(maskcolor.B, outputColor, bgcolor.Color);
                        }

                        if (maskcolor.A > 0 && channelEnabled[2])
                        {
                            Color channelcolor = Color.FromArgb(1, channel3Row[pixelLocation + 2], channel3Row[pixelLocation + 1], channel3Row[pixelLocation]);
                            bgcolor = new MadScience.Colours.HSVColor(channelcolor);
                            bgcolor.Hue += channel3Color.Hue;
                            bgcolor.Saturation += channel3Color.Saturation;
                            bgcolor.Value += channel3Color.Value;
                            outputColor = ColorOverlay(maskcolor.A, outputColor, bgcolor.Color);
                        }

                        outputRow[pixelLocation] = (byte)outputColor.B;
                        outputRow[pixelLocation + 1] = (byte)outputColor.G;
                        outputRow[pixelLocation + 2] = (byte)outputColor.R;
                        outputRow[pixelLocation + 3] = (byte)outputColor.A;
                    }
                }
            }
            output.UnlockBits(outputData);
            mask.UnlockBits(maskData);
            background.UnlockBits(backgroundData);
            channel1.UnlockBits(channel1Data);
            channel2.UnlockBits(channel2Data);
            channel3.UnlockBits(channel3Data);

            return output;
        }
        public static Bitmap createHSVPattern(Stream backgroundStream, MadScience.Colours.HSVColor backgroundColor)
        {
            Bitmap output = new Bitmap(256, 256, PixelFormat.Format32bppArgb);

            Bitmap background = LoadBitmapFromStream(backgroundStream, 256, 256);
            if (background == null)
                return output;

            BitmapData outputData = output.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData backgroundData = background.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            Color outputColor;
            const int pixelSize = 4;
            //process every pixel
            unsafe
            {
                for (int y = 0; y < 256; y++)
                {
                    byte* outputRow = (byte*)outputData.Scan0 + (y * outputData.Stride);
                    byte* inputRow = (byte*)backgroundData.Scan0 + (y * backgroundData.Stride);

                    for (int x = 0; x < 256; x++)
                    {

                        int pixelLocation = x * pixelSize;

                        Color inputcolor = Color.FromArgb(255, inputRow[pixelLocation + 2], inputRow[pixelLocation + 1], inputRow[pixelLocation]);

                        MadScience.Colours.HSVColor bgcolor = new MadScience.Colours.HSVColor(inputcolor);
                        bgcolor.Hue += backgroundColor.Hue;
                        bgcolor.Saturation += backgroundColor.Saturation;
                        bgcolor.Value += backgroundColor.Value;
                        outputColor = bgcolor.Color;

                        outputRow[pixelLocation] = (byte)outputColor.B;
                        outputRow[pixelLocation + 1] = (byte)outputColor.G;
                        outputRow[pixelLocation + 2] = (byte)outputColor.R;
                        outputRow[pixelLocation + 3] = (byte)outputColor.A;
                    }
                }
            }
            output.UnlockBits(outputData);
            background.UnlockBits(backgroundData);

            return output;
        }
Exemple #4
0
        public static Bitmap createHSVPattern(Stream backgroundStream, Stream maskStream, MadScience.Colours.HSVColor backgroundColor, Stream channel1Stream, Stream channel2Stream, Stream channel3Stream, MadScience.Colours.HSVColor channel1Color, MadScience.Colours.HSVColor channel2Color, MadScience.Colours.HSVColor channel3Color, bool[] channelEnabled)
        {
            Bitmap output = new Bitmap(256, 256, PixelFormat.Format32bppArgb);

            Bitmap background = LoadBitmapFromStream(backgroundStream, 256, 256);
            Bitmap mask       = LoadBitmapFromStream(maskStream, 256, 256);

            if (background == null || mask == null)
            {
                return(output);
            }

            Bitmap channel1 = LoadBitmapFromStreamOrEmpty(channel1Stream, 256, 256);
            Bitmap channel2 = LoadBitmapFromStreamOrEmpty(channel2Stream, 256, 256);
            Bitmap channel3 = LoadBitmapFromStreamOrEmpty(channel3Stream, 256, 256);

            BitmapData outputData     = output.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData backgroundData = background.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData maskData       = mask.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData channel1Data   = channel1.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData channel2Data   = channel2.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            BitmapData channel3Data   = channel3.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            Color      outputColor;
            const int  pixelSize = 4;

            //process every pixel
            unsafe
            {
                for (int y = 0; y < 256; y++)
                {
                    byte *outputRow   = (byte *)outputData.Scan0 + (y * outputData.Stride);
                    byte *inputRow    = (byte *)backgroundData.Scan0 + (y * backgroundData.Stride);
                    byte *maskRow     = (byte *)maskData.Scan0 + (y * maskData.Stride);
                    byte *channel1Row = (byte *)channel1Data.Scan0 + (y * channel1Data.Stride);
                    byte *channel2Row = (byte *)channel2Data.Scan0 + (y * channel2Data.Stride);
                    byte *channel3Row = (byte *)channel3Data.Scan0 + (y * channel3Data.Stride);

                    for (int x = 0; x < 256; x++)
                    {
                        int pixelLocation = x * pixelSize;

                        Color inputcolor = Color.FromArgb(255, inputRow[pixelLocation + 2], inputRow[pixelLocation + 1], inputRow[pixelLocation]);
                        Color maskcolor  = Color.FromArgb(maskRow[pixelLocation + 3], maskRow[pixelLocation + 2], maskRow[pixelLocation + 1], maskRow[pixelLocation]);

                        MadScience.Colours.HSVColor bgcolor = new MadScience.Colours.HSVColor(inputcolor);
                        bgcolor.Hue        += backgroundColor.Hue;
                        bgcolor.Saturation += backgroundColor.Saturation;
                        bgcolor.Value      += backgroundColor.Value;
                        outputColor         = bgcolor.Color;

                        if (maskcolor.G > 0 && channelEnabled[0])
                        {
                            Color channelcolor = Color.FromArgb(1, channel1Row[pixelLocation + 2], channel1Row[pixelLocation + 1], channel1Row[pixelLocation]);
                            bgcolor             = new MadScience.Colours.HSVColor(channelcolor);
                            bgcolor.Hue        += channel1Color.Hue;
                            bgcolor.Saturation += channel1Color.Saturation;
                            bgcolor.Value      += channel1Color.Value;
                            outputColor         = ColorOverlay(maskcolor.G, outputColor, bgcolor.Color);
                        }

                        if (maskcolor.B > 0 && channelEnabled[1])
                        {
                            Color channelcolor = Color.FromArgb(1, channel2Row[pixelLocation + 2], channel2Row[pixelLocation + 1], channel2Row[pixelLocation]);
                            bgcolor             = new MadScience.Colours.HSVColor(channelcolor);
                            bgcolor.Hue        += channel2Color.Hue;
                            bgcolor.Saturation += channel2Color.Saturation;
                            bgcolor.Value      += channel2Color.Value;
                            outputColor         = ColorOverlay(maskcolor.B, outputColor, bgcolor.Color);
                        }

                        if (maskcolor.A > 0 && channelEnabled[2])
                        {
                            Color channelcolor = Color.FromArgb(1, channel3Row[pixelLocation + 2], channel3Row[pixelLocation + 1], channel3Row[pixelLocation]);
                            bgcolor             = new MadScience.Colours.HSVColor(channelcolor);
                            bgcolor.Hue        += channel3Color.Hue;
                            bgcolor.Saturation += channel3Color.Saturation;
                            bgcolor.Value      += channel3Color.Value;
                            outputColor         = ColorOverlay(maskcolor.A, outputColor, bgcolor.Color);
                        }

                        outputRow[pixelLocation]     = (byte)outputColor.B;
                        outputRow[pixelLocation + 1] = (byte)outputColor.G;
                        outputRow[pixelLocation + 2] = (byte)outputColor.R;
                        outputRow[pixelLocation + 3] = (byte)outputColor.A;
                    }
                }
            }
            output.UnlockBits(outputData);
            mask.UnlockBits(maskData);
            background.UnlockBits(backgroundData);
            channel1.UnlockBits(channel1Data);
            channel2.UnlockBits(channel2Data);
            channel3.UnlockBits(channel3Data);

            return(output);
        }