图像数据的Ctypes malloc

2024-09-27 21:34:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用ctypes包装以下c函数:

    #define MAX_IMAGE_WIDTH 1024
    #define MAX_IMAGE_HEIGHT 1024
    UFE_STATUS ufe_res;
    char szFileName[256];
    unsigned char* pImage;
    int nWidth;
    int nHeight;

    // Get file name from user, szFileName

    // Allocate image buffer
    pImage = (unsigned char*)malloc(MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT);
    ufe_res = UFE_LoadImageFromBMPFile(szFileName, pImage, &nWidth, &nHeight);

但是,我不知道如何在python中使用如下CType分配内存:

pImage = (unsigned char*)malloc(MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT);

有人能告诉我怎么做吗


Tags: imagereswidthmaxintheightchardefine
1条回答
网友
1楼 · 发布于 2024-09-27 21:34:07

下面将分配一个char数组c_char * N创建大小为N的一维数组:

image = (c_char * (MAX_IMAGE_WIDTH * MAX_IMAGE_HEIGHT))()

请注意,括号很重要:

>>> import ctypes
>>> x=10
>>> y=20
>>> ctypes.c_char * x * y                      # 2D char[y][x] equivalent type
<class '__main__.c_char_Array_10_Array_20'>    # note order of x and y above
>>> ctypes.c_char * (x * y)                    # 1D char[x*y] equivalent type
<class '__main__.c_char_Array_200'>
>>> (ctypes.c_char * (x*y))()                  # instance of char[x*y] array.
<__main__.c_char_Array_200 object at 0x0000014CBB9AF848>
>>> i = (ctypes.c_char * x * y)()              # instance of 2D char[y][x] array.
>>> i[19]                                      # first dimension is y
<__main__.c_char_Array_10 object at 0x0000014CBB9AF848>
>>> i[19][9]                                   # 2nd dimension is x
b'\x00'

上面的代码可以创建任何类型的数组。如果需要c_charc_wchar数组,可以使用:

>>> ctypes.create_string_buffer(x * y)
<__main__.c_char_Array_200 object at 0x0000014CBB9AF9C8>
>>> ctypes.create_unicode_buffer(x * y)
<ctypes.c_wchar_Array_200 object at 0x0000014CBB9AF848>

相关问题 更多 >

    热门问题