На C# : байтовый массив Диб в растровое изображение
Я работаю с COM-интерфейсом программного обеспечения, в частности OMICRON MPD 600. Я хотел бы сделать снимок экрана с помощью предоставленных методов, однако он возвращает изображение в виде DIB, заполненного внутри байтового массива.
Как можно использовать этот байтовый массив для сохранения этого снимка экрана в виде изображения? Я бы предпочел DIB растровому преобразованию, но на самом деле все, что позволило бы мне сохранить его как изображение, приемлемо.
У меня есть код VBA, который выполнил эту задачу с помощью:
Step 1: CopyMemory Step 2: GetDC Step 3: CreateCompatibleDC Step 4: CreateCompatibleBitmap Step 5: SelectObject Step 6: SetDIBits Step 7: OleCreatePictureIndirect
Однако, когда я попытался сделать это с помощью C#, я застрял на первом шаге, где я извлекаю BitmapInfoHeader из массива байтов. Я могу извлечь значения he, но эти значения кажутся неправильными.
Что я уже пробовал:
int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(BITMAPINFOHEADER)); Debug.Print("Size of BitMapInfoHeader: " + size + ""); GCHandle pinned = GCHandle.Alloc(l, GCHandleType.Pinned); IntPtr lPtr = pinned.AddrOfPinnedObject(); Debug.Print("Byte Array Lenght: " + l.Length + ""); BITMAPINFOHEADER bim = (BITMAPINFOHEADER)Marshal.PtrToStructure(lPtr, typeof(BITMAPINFOHEADER));
Выше C# код дает мне:
Byte Array Lenght: 897860 biWidth after: -256 biHeight after: 511 biSize after: 256 biSizeImage after: 3005743104 biBitCount after: 0
В то время как рабочий код VBA производит:
Byte Array Length: 897832 biBitCount: 32 biClrImportant: 0 biClrUsed: 0 biCompression: 0 biHeight: 448 biPlanes: 1 biSize: 40 biSizeImage: 0 biWidth: 501 biXPelsPerMeter: 3110