C# код для чтения bmp-файла в 2d Jagged массив, затем считывание Jagged массива в новый файл System.Drawing.Image и отображение - PullRequest
0 голосов
/ 31 марта 2020

на первый взгляд, я могу прочитать BMP в 2-й зубчатый массив. Однако, когда я пытаюсь передать массив 2d с зубчатыми краями обратно в файл System.Drawing.Image, я получаю сообщение об ошибке «Параметр не действителен»

Некоторые предпосылки: я помню время, когда можно было печатать и читать пиксели и из формы, отображаемой на экране, я хочу использовать для этой цели 2-мерный массив.

По сути, я хочу использовать массив Jagged для распознавания текста, но смогу визуально увидеть, что алгоритм читает мой код:

Void loadimage()
{
                string filepath3 = “C:\\Imagepath\\1.bmp";
                FileStream ifsImages3 = new FileStream(filepath3, FileMode.Open); // test images
                BinaryReader brImages3 =  new BinaryReader(ifsImages3);

                byte[][] pixels = new byte[28][];

                for (int i = 0; i < pixels.Length; ++i)
                {
                    pixels[i] = new byte[28];

                }

                for (int di = 0; di < 10; ++di)
                {
                    for (int i = 0; i < 28; ++I)
                    {
                        for (int j = 0; j < 28; ++j)
                        {
                            byte b = brImages3.ReadByte();
                            pixels[i][j] = b;

                        }
                    }

                    //##################################
                     MyImageTools MIT = new MyImageTools();
                     System.Drawing.Image imjagged = MIT.GetImageFromByteJaggedArray(pixels);

                      MyBitmapImage MBI = new MyBitmapImage();
                      mwin.imgShowMe.Source = MBI.GetImageSource(imjagged);
                      string stopper = "xx";
                    //##################################
}

        public Image GetImageFromByteJaggedArray(byte[][] imagearray)
        {
            //byte[][] doubleArray = imagearray;
            byte[][] doubleArray = new byte[28][];

            for (int uj = 0; uj < imagearray.Length; uj++)
            {
                doubleArray[uj] = new byte[28];
                imagearray[uj].CopyTo(doubleArray[uj], 0);
            }

            byte[] singleArray = doubleArray.SelectMany(x => x).ToArray();
            MemoryStream ms = new MemoryStream(singleArray);
            System.Drawing.Image im = Image.FromStream(ms);
            return im;
        }
...