0

私は 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 関数を使用する必要があります。どうすればいいですか?構造体の配列についての質問です。

THX

4

3 に答える 3

5

C コードを共有ライブラリとしてコンパイルし、「ctypes」python モジュールを使用してライブラリと対話する必要があります。ここから始める
ことをお勧めします。

于 2012-06-16T16:56:38.593 に答える
0

最初に 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)
于 2012-06-16T18:09:16.560 に答える
0

これも役に立ちます: 「C または C++ による Python の拡張」、簡単な例から始めます。詳細については、こちらを参照してください

于 2012-06-16T17:00:09.997 に答える