24-битное изображение RGB, но не имеет синего канала.Как я могу получить к нему доступ? - PullRequest
1 голос
/ 25 сентября 2019

Мне нужно извлечь цветное изображение из файла.У меня есть это в байтовом массиве, и я действительно извлек его, но у него есть 2 канала, и я понятия не имею, как получить или получить третий канал.Я видел исходное изображение, и оно должно быть цветным.Изображение 1024x720.3 байта на пиксель.

Я пробовал с массивом [1024, 720, 3], но он был больше, чем файл, поэтому три канала, хранящиеся таким образом, не могут быть такими.

                byte[] image_array = File.ReadAllBytes(ofd.FileName);
                int start = image_array.Length - (1024 * 720 * 2);
                int o = start;

                Bitmap bmp = new Bitmap(1024, 720);
                BitmapData bmd = bmp.LockBits(new Rectangle(0, 0, 1024,
                    720), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                unsafe
                {
                    byte* scan0 = (byte*)bmd.Scan0.ToPointer();
                    for (int i = 0; i < 720; i++)
                    {
                        for (int j = 0; j < 1024; j++)
                        {
                            byte* tmp = scan0 + i * bmd.Stride + j * 3;

                            tmp[0] = image_array[o++];
                            tmp[1] = image_array[o++];
                            tmp[2] = 0;
                        }
                    }
                }
                bmp.UnlockBits(bmd);
                pictureBox1.Image = bmp;

Я перебираю ту часть файла, где хранится изображение, и в результате получается видимое изображение, довольно зеленоватое, потому что синий канал установлен на 0, потому что я не знаю, как его получить.

...