У меня возникают проблемы с преобразованием серого массива INT (int32 [,]) в формат BMP в C#.
Я пытался ездить на велосипеде через массив, чтобы установить цвет пикселей в BMP, он действительно работает, но в итоге он действительно медленный и практически не используется. должен быть быстрым. < /p>
Соответствующее обсуждение здесь < /p>
Редактировать: массив составляет 8bit -глубину, но хранится как int32 < /p>
edit2: только что нашел этот код < /p>
private unsafe Task BitmapFromArray(Int32[,] pixels, int width, int height)
{
return Task.Run(() =>
{
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
for (int y = 0; y < height; y++)
{
byte* row = (byte*)bitmapData.Scan0 + bitmapData.Stride * y;
for (int x = 0; x < width; x++)
{
byte grayShade8bit = (byte)(pixels[x, y] >> 4);
row[x * 3 + 0] = grayShade8bit;
row[x * 3 + 1] = grayShade8bit;
row[x * 3 + 2] = grayShade8bit;
}
}
bitmap.UnlockBits(bitmapData);
return bitmap;
});
}
< /code>
, кажется, работает достаточно быстро, но изображение почти черное. Если я удаляю верхнюю часть камеры, изображение должно быть совершенно белым, но оно отображает действительно темно -серый. Я думаю, что это интерпретирует значение пикселя как 32 -битное, а не 8 -бит. Затем попытался разыграть (USHORT) пиксели [x, y], но не работает
Подробнее здесь: https://stackoverflow.com/questions/490 ... in-c-sharp
Превращение массива в BMP в C# ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение