我正在使用一个非托管库,它可以生成灰度图像(大约100x200像素,或多或少).图像包含在结构中,在C中如下所示:
typedef struct abs_image {
ABS_DWORD Width;
ABS_DWORD Height;
ABS_DWORD ColorCount;
ABS_DWORD HorizontalDPI;
ABS_DWORD VerticalDPI;
ABS_BYTE ImageData[ABS_VARLEN];
} ABS_IMAGE
Run Code Online (Sandbox Code Playgroud)
typedef unsigned int ABS_DWORD;
typedef unsigned char ABS_BYTE;
Run Code Online (Sandbox Code Playgroud)
在这里我的C#包装器结构:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct ABS_IMAGE {
public uint Width;
public uint Height;
public uint ColorCount;
public uint HorizontalDPI;
public uint VerticalDPI;
public IntPtr ImageData;
}
Run Code Online (Sandbox Code Playgroud)
抓取图像并对ABS_IMAGE结构进行marshallign 工作就好了.在以前的版本中,我尝试使用固定长度的字节数组用于ImageData,有时会崩溃.我想这发生了,因为图像尺寸没有修复.现在我尝试在以后读取图像字节数组,之后我可以计算实际的数组长度.这里有相关代码:
ABS_Type_Defs.ABS_IMAGE img =
(ABS_Type_Defs.ABS_IMAGE)Marshal.PtrToStructure(
pImage,
typeof(ABS_Type_Defs.ABS_IMAGE));
int length = ((int)img.Height - 1) * ((int)img.Width - 1);
byte[] data = new byte[length]; …Run Code Online (Sandbox Code Playgroud)