我在 c 中有代码:
typedef struct {
int bottom;
int top;
int left;
int right;
} blur_rect;
int bitmapblur(
char* input,
char* output,
blur_rect* rects,
int count,
int blur_repetitions);
我需要使用 python 中的 bitmapblur 函数。我怎么做?关于结构数组的问题。
谢谢
我在 c 中有代码:
typedef struct {
int bottom;
int top;
int left;
int right;
} blur_rect;
int bitmapblur(
char* input,
char* output,
blur_rect* rects,
int count,
int blur_repetitions);
我需要使用 python 中的 bitmapblur 函数。我怎么做?关于结构数组的问题。
谢谢
您需要将您的 c 代码编译为共享库,然后使用“ctypes”python 模块与库进行交互。
我建议你从这里开始。
这也很有用:“用 C 或 C++ 扩展 Python”,从一个简单的例子开始。你可以在这里找到更多关于它的信息。
您首先需要使用 ctypes。首先,构建一个结构:
import ctypes
class BlurRect(ctypes.Structure):
"""
rectangular area to blur
"""
_fields_ = [("bottom", ctypes.c_int),
("top", ctypes.c_int),
("left", ctypes.c_int),
("right", ctypes.c_int),
]
现在加载你的函数。您需要找出共享库的最佳名称,然后加载它。您应该已经将此代码实现为 dll 或 .so 并在 ld 路径中可用。
另一个棘手的问题是您的函数有一个“输出”参数,并且该函数应将其结果写在那里。您将需要为此创建一个缓冲区。
ctypes 代码将如下所示:
blurlib = ctypes.cdll.LoadLibrary("libblur.so")
outbuf = ctypes.create_string_buffer(1024) # not sure how big you need this
inputStructs = [BlurRect(*x) for x in application_defined_data]
successFlag = blurlib.bitmapblur("input",
outbuf,
inputStructs,
count,
reps)