JBHowl Ответов: 2

Копирование байт[] на месте в bimtap


У меня есть два байта [], которые представляют растровые изображения. Я хочу скопировать их в одно растровое изображение, поместив рядом друг с другом. Возможно ли это с маршалом? См. код ниже для того, как я хотел бы, чтобы он работал. Заранее спасибо.

//Bitmap 100x100
            byte[] frame1 = null;
            //Bitmap 100x100
            byte[] frame2 = null;

            using (Bitmap bmp = new Bitmap(200, 100))
            {
                BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);

                //I want to copy frame1 to location 0,0 in the bitmap
                Marshal.Copy(frame1, 0, bmpData.Scan0, frame1.Length);

                //I want to copy frame2 to location 100,0 in the bitmap
                Marshal.Copy(frame2, 0, bmpData.Scan0, frame2.Length);

                bmp.UnlockBits(bmpData);
            }


Что я уже пробовал:

У меня есть два байта [], которые представляют растровые изображения. Я хочу скопировать их в одно растровое изображение, поместив рядом друг с другом. Возможно ли это с маршалом? См. код ниже для того, как я хотел бы, чтобы он работал. Заранее спасибо.

2 Ответов

Рейтинг:
2

RickZeeland

Не обязательно использовать Маршал, можно использовать что-то вроде этого:

graphics.DrawImage (
			bitmap,
			new Rectangle ( 0, 0, Width, Height ),
			new Rectangle ( 0, 0, Width, Height ),
			GraphicsUnit.Pixel );

Поскольку это может быть слишком медленно для вас, возможно, это будет вам больше по душе: Быстрая бессмысленная обработка изображений в .NET[^]


JBHowl

Нет, это медленно. Графика изначально работает медленнее, но мне также придется конвертировать байтовые массивы в растровые изображения.

Рейтинг:
1

Midi_Mick

Вероятно, самым простым и быстрым решением для размещения изображений рядом друг с другом было бы использование Растрового изображения.Способ Передача Битового Блока [^]. Это означает, что сначала вам придется преобразовать массивы byte[] в растровые изображения, но с помощью LockBits метод, как вы делаете выше, должен сделать это достаточно простым. Попытка поместить изображения бок о бок непосредственно в данные конечного растрового изображения сложна, так как вам нужно будет перебирать каждую строку результата, копируя по одной строке данных из каждого массива за раз.