我使用的是python,当然你不能很快地遍历大图像的每个像素,所以我使用的是c dll。
我想这样做:

img = QImage("myimage.png").constBits()
imgPtr = c_void_p(img)
found = ctypesDLL.myImageSearchMethod(imgPtr, width, height)

但这条线
imgptr=c_void_p(img)
尖叫声
builtins.typeerror:无法转换为指针
我不需要修改这些位。请教我你的绝地武士在这方面的方法。

最佳答案

如前所述,heresip.voidptr.__int__()方法
以整数形式返回地址
c_void_pdocumentation
构造函数接受一个可选的整数初始化器。
因此,您应该能够构建一个c_void_psip.voidptr.__int__()方法的返回值传递给其构造函数:

imgPtr = c_void_p(img.__int__())

我是这样测试这个解决方案的:
from PyQt5 import QtGui
from ctypes import *

lib = CDLL("/usr/lib/libtestlib.so")

image = QtGui.QImage("so.png")
bits = image.constBits()
bytes = image.bytesPerLine()
lib.f(c_void_p(bits.__int__()), c_int(image.width()), c_int(image.height()), c_int(bytes))

它的功能如下:
#include <cstdio>
#include <QImage>
extern "C" {

    void f(unsigned char * c, int width, int height, int bpl)
    {
        printf("W:%d H:%d BPL:%d\n", width, height, bpl);
        QImage image(c, width, height, bpl, QImage::Format_RGB32);
        image.save("test.bmp");
    }
}

08-25 01:22