C# Bitmap Bitmapimage Bitmapsource
-
11-10-2019 - |
Вопрос
У меня есть код, который я нашел где -то в сети.
unsafe static Bitmap SaveFrame(IntPtr pFrame, int width, int height)
{
try
{
int x, y;
int linesize = width * 3;
byte* scan0 = (byte*)Marshal.ReadIntPtr(pFrame);
IntPtr bufferPtr = Marshal.AllocHGlobal(linesize * height);
byte* buffer = (byte*)bufferPtr;
for (y = 0; y < height; y++)
{
for (x = 0; x < linesize; x = x + 3)
{
*buffer++ = (byte)*(scan0 + y * linesize + x + 2);
*buffer++ = (byte)*(scan0 + y * linesize + x + 1);
*buffer++ = (byte)*(scan0 + y * linesize + x);
}
}
Bitmap b = new Bitmap(width, height, linesize, System.Drawing.Imaging.PixelFormat.Format24bppRgb, bufferPtr);
return b;
}
catch (Exception ex) { throw new Exception(ex.Message); }
}
Этот вышеупомянутый код дает мне действительный растровый карту, однако я использую WPF и хочу, чтобы он был в растровом масштабе
Не проходя через этот процесс, я пробую код
byte[] ptr = ....
Marshal.Copy(pFrame, ptr , 0, ptr .Length);
BitmapImage aBitmapImage = new BitmapImage();
aBitmapImage.BeginInit();
aBitmapImage.StreamSource = new MemoryStream(ptr); //FLastImageMemStream;//
aBitmapImage.EndInit();
Что не работает ...
Я также попробовал
System.Windows.Media.Imaging.BitmapSource.Create(width, height, 96, 96,
System.Windows.Media.PixelFormats.Rgb24, null, bufferPtr,linesize * height,
width * 3 ));
который также не дает мне изображения (после присвоения его свойству источника изображения)
Кто -нибудь может дать мне какие -либо подсказки? Спасибо, Аллен
Решение
Загрузка данных непосредственно в растровое место не сработала, потому что ожидает данные в формате файла изображения, как вы увидите в файле .bmp или .png. Вместо этого вы предоставили необработанные данные пикселя.
Ваш второй подход выглядит так, как будто он должен работать, но имеет некоторые ненужные шаги к нему. Код, который вы нашли, переписывает данные Pixel от BGR24 до RGB24, но вы сможете просто загрузить их напрямую как BGR24:
System.Windows.Media.Imaging.BitmapSource.Create(width, height, 96, 96,
System.Windows.Media.PixelFormats.Bgr24, null, pFrame, linesize * height,
width * 3 ));
В любом случае, есть ли у вас подробности о том, почему это не дает вам изображения? Вы получили какие -либо исключения при создании растрового изображения? Это дало неправильные цвета или неправильный размер? Вы уверены, что есть исходные данные? Что вы видите на свойствах Bitmapsource после его создания?
Другие советы