/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public static Rectangle determineImageRect(Bitmap someImage)
        {
            BitmapData bitmapData = ImageProcessor.getBitmapData(someImage);

            bool  flag = false;
            Color pixelColor;
            Color blackColor = Color.Black;

            int top    = 0;
            int left   = 0;
            int right  = 0;
            int bottom = 0;

            for (int i = 0; i < someImage.Height; i++)
            {
                for (int j = 0; j < someImage.Width; j++)
                {
                    pixelColor = ImageProcessor.getPixel(j, i, bitmapData);
                    if (pixelColor.ToArgb() != blackColor.ToArgb())
                    {
                        flag = true;
                        break;
                    }
                }

                if (flag == true)
                {
                    top = i;
                    break;
                }
            }

            flag = false;
            for (int i = 0; i < someImage.Width; i++)
            {
                for (int j = 0; j < someImage.Height; j++)
                {
                    pixelColor = ImageProcessor.getPixel(i, j, bitmapData);
                    if (pixelColor.ToArgb() != blackColor.ToArgb())
                    {
                        flag = true;
                        break;
                    }
                }

                if (flag == true)
                {
                    left = i;
                    break;
                }
            }

            flag = false;
            for (int i = someImage.Width - 1; i >= 0; i--)
            {
                for (int j = 0; j < someImage.Height; j++)
                {
                    pixelColor = ImageProcessor.getPixel(i, j, bitmapData);
                    if (pixelColor.ToArgb() != blackColor.ToArgb())
                    {
                        flag = true;
                        break;
                    }
                }

                if (flag == true)
                {
                    right = i;
                    break;
                }
            }

            flag = false;
            for (int i = someImage.Height - 1; i >= 0; i--)
            {
                for (int j = 0; j < someImage.Width; j++)
                {
                    pixelColor = ImageProcessor.getPixel(j, i, bitmapData);
                    if (pixelColor.ToArgb() != blackColor.ToArgb())
                    {
                        flag = true;
                        break;
                    }
                }

                if (flag == true)
                {
                    bottom = i;
                    break;
                }
            }


            someImage.UnlockBits(bitmapData);

            Rectangle result = new Rectangle(left, top, right - left + 1, bottom - top + 1);

            return(result);
        }
Exemplo n.º 2
0
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public static void drawLines(double N_sin, double f1, int max_x, int max_y, int XY, PictureBox pc1)    // sin b/w
        {
            BitmapData bitmapData = ImageProcessor.getBitmapData((Bitmap)pc1.Image);
            byte       r;
            double     nx = max_x + 1;
            double     pi = Math.PI;
            double     af = pi * 2 * N_sin / nx;

            if (XY == 0)  // Полосы ориентированы перпендикулярно оси X
            {
                for (int i = 0; i < max_x; i++)
                {
                    for (int j = 0; j < max_y; j++)
                    {
                        r = (byte)((Math.Sin(af * i + 1 + pi * f1 / 180) + 1) * 127);
                        if (r > 255)
                        {
                            r = 0;
                        }

                        if (r > 125)
                        {
                            r = 255;
                        }
                        else
                        {
                            r = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, i, j, Color.FromArgb(r, r, r));
                    }
                }
            }

            if (XY == 1) // Полосы ориентированы перпендикулярно оси y
            {
                for (int i = 0; i < max_y; i++)
                {
                    for (int j = 0; j < max_x; j++)
                    {
                        r = (byte)((Math.Sin(af * i + 1 + pi * f1 / 180) + 1) * 127);
                        if (r > 255)
                        {
                            r = 0;
                        }

                        if (r > 125)
                        {
                            r = 255;
                        }
                        else
                        {
                            r = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, j, i, Color.FromArgb(r, r, r));
                    }
                }
            }

            Color currentColor;
            int   black = 0;
            int   white = 0;

            for (int y = 0; y < max_y; y++)
            {
                for (int x = 0; x < max_x; x++)
                {
                    currentColor = ImageProcessor.getPixel(x, y, bitmapData);

                    if (currentColor.ToArgb() == Color.White.ToArgb())
                    {
                        white++;
                    }
                    else
                    {
                        black++;
                    }
                }
            }

            ((Bitmap)pc1.Image).UnlockBits(bitmapData);
        }
Exemplo n.º 3
0
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public static void drawDitheredLines(double N_sin, double f1, int max_x, int max_y, int XY, PictureBox pc1)
        {
            BitmapData bitmapData = ImageProcessor.getBitmapData((Bitmap)pc1.Image);
            byte       r;
            double     nx = max_x + 1;
            double     pi = Math.PI;
            double     af = pi * 2 * N_sin / nx;

            if (XY == 0)  // Полосы ориентированы перпендикулярно оси X
            {
                for (int i = 0; i < max_x; i++)
                {
                    for (int j = 0; j < max_y; j++)
                    {
                        r = (byte)((Math.Sin(af * i + 1 + pi * f1 / 180) + 1) * 127);
                        if (r > 255)
                        {
                            r = 0;
                        }
                        ImageProcessor.setPixel(bitmapData, i, j, Color.FromArgb(r, r, r));
                    }
                }
            }
            else if (XY == 1) // Полосы ориентированы перпендикулярно оси y
            {
                for (int i = 0; i < max_y; i++)
                {
                    for (int j = 0; j < max_x; j++)
                    {
                        r = (byte)((Math.Sin(af * i + 1 + pi * f1 / 180) + 1) * 127);
                        if (r > 255)
                        {
                            r = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, j, i, Color.FromArgb(r, r, r));
                    }
                }
            }


            Color  currentColor;
            int    averageColor;
            Color  newColor;
            double quantError;

            for (int y = 0; y < max_y; y++)
            {
                for (int x = 0; x < max_x; x++)
                {
                    currentColor = ImageProcessor.getPixel(x, y, bitmapData);
                    averageColor = currentColor.R;

                    if (averageColor >= 128)
                    {
                        newColor = Color.White;
                    }
                    else
                    {
                        newColor = Color.Black;
                    }

                    quantError = averageColor - newColor.R;

                    ImageProcessor.setPixel(bitmapData, x, y, newColor);

                    if (x < max_x - 1)
                    {
                        currentColor = ImageProcessor.getPixel(x + 1, y, bitmapData);
                        double a = (double)(7.0 / 16.0) * quantError;
                        averageColor = currentColor.R + (int)a;

                        if (averageColor > 255)
                        {
                            averageColor = 255;
                        }

                        if (averageColor < 0)
                        {
                            averageColor = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, x + 1, y, Color.FromArgb(averageColor, averageColor, averageColor));
                    }

                    if ((y < max_y - 1) && (x > 0))
                    {
                        currentColor = ImageProcessor.getPixel(x - 1, y + 1, bitmapData);
                        double a = (3.0 / 16.0) * quantError;
                        averageColor = currentColor.R + (int)a;

                        if (averageColor > 255)
                        {
                            averageColor = 255;
                        }

                        if (averageColor < 0)
                        {
                            averageColor = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, x - 1, y + 1, Color.FromArgb(averageColor, averageColor, averageColor));
                    }

                    if (y < max_y - 1)
                    {
                        currentColor = ImageProcessor.getPixel(x, y + 1, bitmapData);
                        double a = (5.0 / 16.0) * quantError;
                        averageColor = currentColor.R + (int)a;

                        if (averageColor > 255)
                        {
                            averageColor = 255;
                        }

                        if (averageColor < 0)
                        {
                            averageColor = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, x, y + 1, Color.FromArgb(averageColor, averageColor, averageColor));
                    }

                    if ((y < max_y - 1) && (x < max_x - 1))
                    {
                        currentColor = ImageProcessor.getPixel(x + 1, y + 1, bitmapData);
                        double a = (1.0 / 16.0) * quantError;
                        averageColor = currentColor.R + (int)a;

                        if (averageColor > 255)
                        {
                            averageColor = 255;
                        }

                        if (averageColor < 0)
                        {
                            averageColor = 0;
                        }

                        ImageProcessor.setPixel(bitmapData, x + 1, y + 1, Color.FromArgb(averageColor, averageColor, averageColor));
                    }
                }
            }

            int black = 0;
            int white = 0;

            for (int y = 0; y < max_y; y++)
            {
                for (int x = 0; x < max_x; x++)
                {
                    currentColor = ImageProcessor.getPixel(x, y, bitmapData);

                    if ((currentColor.ToArgb() != Color.White.ToArgb()) && (currentColor.ToArgb() != Color.Black.ToArgb()))
                    {
                        if (currentColor.R >= 128)
                        {
                            newColor = Color.White;
                        }
                        else
                        {
                            newColor = Color.Black;
                        }
                        ImageProcessor.setPixel(bitmapData, x, y, newColor);
                    }

                    if (currentColor.ToArgb() == Color.White.ToArgb())
                    {
                        white++;
                    }
                    else
                    {
                        black++;
                    }
                }
            }

            ((Bitmap)pc1.Image).UnlockBits(bitmapData);
        }
        //---------------------------------------------------------------------------------------------------------------------
        //
        //         Из ZArrayDescriptor.array в PictureBox
        //
        public void Double_Picture(PictureBox pictureBox01)
        {
            Bitmap     bmp2  = new Bitmap(width, height);
            BitmapData data2 = ImageProcessor.getBitmapData(bmp2);

            // c1 = ImageProcessor.getPixel(i, j, data1);                       // c1 = bmp1.GetPixel(i, j);
            // ImageProcessor.setPixel(data5, i, j, Color.FromArgb(r, r, r));   // bmp2.SetPixel(j, i, c1);
            // bmp5.UnlockBits(data5);
            if (pictureBox01 == null)
            {
                MessageBox.Show("pictureBox01 == null");           return;
            }
            if (array == null)
            {
                MessageBox.Show("ZArrayDescriptor array == null"); return;
            }

            double max = double.MinValue;
            double min = double.MaxValue;

            for (int j = 0; j < width; j++)
            {
                for (int i = 0; i < height; i++)
                {
                    min = Math.Min(min, array[i, j]);
                    max = Math.Max(max, array[i, j]);
                }
            }
            //MessageBox.Show("max = " + Convert.ToString(max) + " min = " + Convert.ToString(min));

            if (Math.Abs(max - min) < 0.0000001)
            {
                // MessageBox.Show("max = min");
                int c = 0;
                if (max < 255 && max > 0.0)
                {
                    c = Convert.ToInt32(max);
                }
                if (max > 255)
                {
                    c = 255;
                }
                if (max < 0)
                {
                    c = 0;
                }
                for (int j = 0; j < width; j++)
                {
                    for (int i = 0; i < height; i++)
                    {
                        Color c1 = Color.FromArgb(c, c, c);
                        ImageProcessor.setPixel(data2, j, i, c1);
                    }
                }
                pictureBox01.Image = bmp2;
                bmp2.UnlockBits(data2);
                return;
            }
            if (max != min)
            {
                double mxmn = 255.0 / (max - min);
                for (int j = 0; j < width; j++)
                {
                    for (int i = 0; i < height; i++)
                    {
                        int   c  = Convert.ToInt32((array[j, i] - min) * mxmn);
                        Color c1 = Color.FromArgb(c, c, c);
                        ImageProcessor.setPixel(data2, j, i, c1);
                    }
                }
                pictureBox01.Image = bmp2;
                bmp2.UnlockBits(data2);
                return;
            }
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        unsafe private static void drawPixel(int x, int y, Color fillColor, List <Point> listOfPoints, BitmapData imageData, Image someImage, Color borderColor)
        {
            Color pixelcolor;

            if (x + 1 < someImage.Size.Width)
            {
                pixelcolor = ImageProcessor.getPixel(x + 1, y, imageData);
                if (pixelcolor.ToArgb() != borderColor.ToArgb())
                {
                    listOfPoints.Add(new Point(x + 1, y));
                    ImageProcessor.setPixel(imageData, x + 1, y, fillColor);
                }
            }

            if ((x + 1 < someImage.Size.Width) && (y + 1 < someImage.Size.Height))
            {
                pixelcolor = ImageProcessor.getPixel(x + 1, y + 1, imageData);

                if ((pixelcolor.ToArgb() != borderColor.ToArgb()))
                {
                    listOfPoints.Add(new Point(x + 1, y + 1));
                    ImageProcessor.setPixel(imageData, x + 1, y + 1, fillColor);
                }
            }

            if (y + 1 < someImage.Size.Height)
            {
                pixelcolor = ImageProcessor.getPixel(x, y + 1, imageData);

                if (pixelcolor.ToArgb() != borderColor.ToArgb())
                {
                    listOfPoints.Add(new Point(x, y + 1));
                    ImageProcessor.setPixel(imageData, x, y + 1, fillColor);
                }
            }


            if (x - 1 >= 0)
            {
                pixelcolor = ImageProcessor.getPixel(x - 1, y, imageData);

                if (pixelcolor.ToArgb() != borderColor.ToArgb())
                {
                    listOfPoints.Add(new Point(x - 1, y));
                    ImageProcessor.setPixel(imageData, x - 1, y, fillColor);
                }
            }

            if (y - 1 >= 0)
            {
                pixelcolor = ImageProcessor.getPixel(x, y - 1, imageData);

                if (pixelcolor.ToArgb() != borderColor.ToArgb())
                {
                    listOfPoints.Add(new Point(x, y - 1));
                    ImageProcessor.setPixel(imageData, x, y - 1, fillColor);
                }
            }

            if ((y - 1 >= 0) && (x - 1 >= 0))
            {
                pixelcolor = ImageProcessor.getPixel(x - 1, y - 1, imageData);

                if (pixelcolor.ToArgb() != borderColor.ToArgb())
                {
                    listOfPoints.Add(new Point(x - 1, y - 1));
                    ImageProcessor.setPixel(imageData, x - 1, y - 1, fillColor);
                }
            }
        }
Exemplo n.º 6
0
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///          Приведение изображения к диапазону без ZArrayDescriptor (перегруженный метод)
        /// </summary>
        public static void Range_Picture(PictureBox pictureBox01, double min, double max)
        {
            // c1 = ImageProcessor.getPixel(i, j, data1);                       // c1 = bmp1.GetPixel(i, j);
            // ImageProcessor.setPixel(data5, i, j, Color.FromArgb(r, r, r));   // bmp2.SetPixel(j, i, c1);
            // bmp5.UnlockBits(data5);
            if (pictureBox01 == null)
            {
                MessageBox.Show("SumClass pictureBox01 == null"); return;
            }


            int width  = pictureBox01.Image.Width;
            int height = pictureBox01.Image.Height;

            Bitmap     bmp2  = new Bitmap(width, height);
            BitmapData data2 = ImageProcessor.getBitmapData(bmp2);

            Bitmap     bmp1  = new Bitmap(pictureBox01.Image, width, height);
            BitmapData data1 = ImageProcessor.getBitmapData(bmp1);


            if (max == min)
            {
                for (int j = 0; j < width; j++)
                {
                    for (int i = 0; i < height; i++)
                    {
                        int c = 0;
                        if (max < 255 && max > 0.0)
                        {
                            c = Convert.ToInt32(max);
                        }
                        if (max > 255)
                        {
                            c = 255;
                        }
                        if (max < 0)
                        {
                            c = 0;
                        }
                        Color c1 = Color.FromArgb(c, c, c);
                        ImageProcessor.setPixel(data2, j, i, c1);
                    }
                }
            }
            if (max != min)
            {
                double mxmn = 255.0 / (max - min);
                for (int i = 0; i < width; i++)
                {
                    for (int j = 0; j < height; j++)
                    {
                        //double fc = zArrayPicture.array[j, i];
                        Color  c2 = ImageProcessor.getPixel(i, j, data1);
                        double fc = c2.G;
                        if (fc > max)
                        {
                            fc = max;
                        }
                        if (fc < min)
                        {
                            fc = min;
                        }
                        int   c  = Convert.ToInt32((fc - min) * mxmn);
                        Color c1 = Color.FromArgb(c, c, c);
                        ImageProcessor.setPixel(data2, i, j, c1);
                    }
                }
            }
            pictureBox01.Image = bmp2;
            bmp2.UnlockBits(data2);
        }