コード例 #1
0
ファイル: Filter.cs プロジェクト: igorkrets/atlantidaobot
        static private void ApplyConvolution3x3(ref ImageData Img, ConvolutionMatrix m)
        {
            ImageData newImg = Img.Clone();

            Color[,] pixelColor = new Color[3, 3];
            int A, RedChannel, GreenChannel, BlueChannel;

            for (int y = 0; y < Img.Height - 2; y++)
            {
                for (int x = 0; x < Img.Width - 2; x++)
                {
                    pixelColor[0, 0] = Img[x, y];
                    pixelColor[0, 1] = Img[x, y + 1];
                    pixelColor[0, 2] = Img[x, y + 2];
                    pixelColor[1, 0] = Img[x + 1, y];
                    pixelColor[1, 1] = Img[x + 1, y + 1];
                    pixelColor[1, 2] = Img[x + 1, y + 2];
                    pixelColor[2, 0] = Img[x + 2, y];
                    pixelColor[2, 1] = Img[x + 2, y + 1];
                    pixelColor[2, 2] = Img[x + 2, y + 2];

                    A = pixelColor[1, 1].A;

                    RedChannel = (int)((((pixelColor[0, 0].R * m.Matrix[0, 0]) +
                                         (pixelColor[1, 0].R * m.Matrix[1, 0]) +
                                         (pixelColor[2, 0].R * m.Matrix[2, 0]) +
                                         (pixelColor[0, 1].R * m.Matrix[0, 1]) +
                                         (pixelColor[1, 1].R * m.Matrix[1, 1]) +
                                         (pixelColor[2, 1].R * m.Matrix[2, 1]) +
                                         (pixelColor[0, 2].R * m.Matrix[0, 2]) +
                                         (pixelColor[1, 2].R * m.Matrix[1, 2]) +
                                         (pixelColor[2, 2].R * m.Matrix[2, 2]))
                                        / m.Factor) + m.Offset);



                    GreenChannel = (int)((((pixelColor[0, 0].G * m.Matrix[0, 0]) +
                                           (pixelColor[1, 0].G * m.Matrix[1, 0]) +
                                           (pixelColor[2, 0].G * m.Matrix[2, 0]) +
                                           (pixelColor[0, 1].G * m.Matrix[0, 1]) +
                                           (pixelColor[1, 1].G * m.Matrix[1, 1]) +
                                           (pixelColor[2, 1].G * m.Matrix[2, 1]) +
                                           (pixelColor[0, 2].G * m.Matrix[0, 2]) +
                                           (pixelColor[1, 2].G * m.Matrix[1, 2]) +
                                           (pixelColor[2, 2].G * m.Matrix[2, 2]))
                                          / m.Factor) + m.Offset);


                    BlueChannel = (int)((((pixelColor[0, 0].B * m.Matrix[0, 0]) +
                                          (pixelColor[1, 0].B * m.Matrix[1, 0]) +
                                          (pixelColor[2, 0].B * m.Matrix[2, 0]) +
                                          (pixelColor[0, 1].B * m.Matrix[0, 1]) +
                                          (pixelColor[1, 1].B * m.Matrix[1, 1]) +
                                          (pixelColor[2, 1].B * m.Matrix[2, 1]) +
                                          (pixelColor[0, 2].B * m.Matrix[0, 2]) +
                                          (pixelColor[1, 2].B * m.Matrix[1, 2]) +
                                          (pixelColor[2, 2].B * m.Matrix[2, 2]))
                                         / m.Factor) + m.Offset);

                    RedChannel   = (RedChannel > 255) ? 255 : RedChannel;
                    RedChannel   = (RedChannel < 0) ? 0 : RedChannel;
                    GreenChannel = (GreenChannel > 255) ? 255 : GreenChannel;
                    GreenChannel = (GreenChannel < 0) ? 0 : GreenChannel;
                    BlueChannel  = (BlueChannel > 255) ? 255 : BlueChannel;
                    BlueChannel  = (BlueChannel < 0) ? 0 : BlueChannel;


                    newImg.SetPixel(x + 1, y + 1, Color.FromArgb(A, RedChannel, GreenChannel, BlueChannel));
                }
            }
            Img = newImg.Clone();
        }
コード例 #2
0
ファイル: Filter.cs プロジェクト: tablesmit/BotSuite
        private static void ApplyConvolution3x3(ref ImageData Img, ConvolutionMatrix m)
        {
            ImageData newImg = Img.Clone();
            Color[,] pixelColor = new Color[3, 3];
            int A, RedChannel, GreenChannel, BlueChannel;

            for (int y = 0; y < Img.Height - 2; y++)
            {
                for (int x = 0; x < Img.Width - 2; x++)
                {
                    pixelColor[0, 0] = Img[x, y];
                    pixelColor[0, 1] = Img[x, y + 1];
                    pixelColor[0, 2] = Img[x, y + 2];
                    pixelColor[1, 0] = Img[x + 1, y];
                    pixelColor[1, 1] = Img[x + 1, y + 1];
                    pixelColor[1, 2] = Img[x + 1, y + 2];
                    pixelColor[2, 0] = Img[x + 2, y];
                    pixelColor[2, 1] = Img[x + 2, y + 1];
                    pixelColor[2, 2] = Img[x + 2, y + 2];

                    A = pixelColor[1, 1].A;

                    RedChannel = (int)((((pixelColor[0, 0].R * m.Matrix[0, 0]) +
                                 (pixelColor[1, 0].R * m.Matrix[1, 0]) +
                                 (pixelColor[2, 0].R * m.Matrix[2, 0]) +
                                 (pixelColor[0, 1].R * m.Matrix[0, 1]) +
                                 (pixelColor[1, 1].R * m.Matrix[1, 1]) +
                                 (pixelColor[2, 1].R * m.Matrix[2, 1]) +
                                 (pixelColor[0, 2].R * m.Matrix[0, 2]) +
                                 (pixelColor[1, 2].R * m.Matrix[1, 2]) +
                                 (pixelColor[2, 2].R * m.Matrix[2, 2]))
                                        / m.Factor) + m.Offset);

                    GreenChannel = (int)((((pixelColor[0, 0].G * m.Matrix[0, 0]) +
                                 (pixelColor[1, 0].G * m.Matrix[1, 0]) +
                                 (pixelColor[2, 0].G * m.Matrix[2, 0]) +
                                 (pixelColor[0, 1].G * m.Matrix[0, 1]) +
                                 (pixelColor[1, 1].G * m.Matrix[1, 1]) +
                                 (pixelColor[2, 1].G * m.Matrix[2, 1]) +
                                 (pixelColor[0, 2].G * m.Matrix[0, 2]) +
                                 (pixelColor[1, 2].G * m.Matrix[1, 2]) +
                                 (pixelColor[2, 2].G * m.Matrix[2, 2]))
                                        / m.Factor) + m.Offset);

                    BlueChannel = (int)((((pixelColor[0, 0].B * m.Matrix[0, 0]) +
                                 (pixelColor[1, 0].B * m.Matrix[1, 0]) +
                                 (pixelColor[2, 0].B * m.Matrix[2, 0]) +
                                 (pixelColor[0, 1].B * m.Matrix[0, 1]) +
                                 (pixelColor[1, 1].B * m.Matrix[1, 1]) +
                                 (pixelColor[2, 1].B * m.Matrix[2, 1]) +
                                 (pixelColor[0, 2].B * m.Matrix[0, 2]) +
                                 (pixelColor[1, 2].B * m.Matrix[1, 2]) +
                                 (pixelColor[2, 2].B * m.Matrix[2, 2]))
                                        / m.Factor) + m.Offset);

                    RedChannel = (RedChannel > 255) ? 255 : RedChannel;
                    RedChannel = (RedChannel < 0) ? 0 : RedChannel;
                    GreenChannel = (GreenChannel > 255) ? 255 : GreenChannel;
                    GreenChannel = (GreenChannel < 0) ? 0 : GreenChannel;
                    BlueChannel = (BlueChannel > 255) ? 255 : BlueChannel;
                    BlueChannel = (BlueChannel < 0) ? 0 : BlueChannel;

                    newImg.SetPixel(x + 1, y + 1, Color.FromArgb(A, RedChannel, GreenChannel, BlueChannel));
                }
            }
            Img = newImg.Clone();
        }