Я наткнулся на ответ Ханса Пассанта , в котором говорится, что нужно привести BitmapData.Scan0
к соответствующему примитивному типу указателя (int*
в случае этого вопроса PixelFormat.Format32bppArgb
). Это сбивает меня с толку, поскольку предполагает, что данные System.Drawing.Bitmap
зависят от порядка байтов, то есть в какой-то момент GDI или .NET [Framework / Core] преобразует данные изображения, которые он читает, в машинный порядок байтов.
Это также не имеет особого смысла в контексте форматов пикселей, которые не соответствуют примитивному типу, например Format24bppRgb
. Как может 24-битный блок данных быть зависимым от порядка байтов?
Здравый смысл велел мне читать отдельные байты в указанном порядке (то есть синий, затем зеленый, затем красный, затем альфа). Однако я получаю смешанные сигналы здесь.