gpt4 book ai didi

python - 你如何从 sip.voidptr (QImage.constBits()) 到 ctypes void 或 char 指针?

转载 作者:太空狗 更新时间:2023-10-30 02:53:59 25 4
gpt4 key购买 nike

我正在使用 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: cannot be converted to pointer

我不需要修改位。请教我您在这方面的绝地武士之道。

最佳答案

如前所述here , sip.voidptr.__int__() 方法

returns the address as an integer

同时 c_void_p documentation

The constructor accepts an optional integer initializer.

所以你应该能够构建一个 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");
}
}

关于python - 你如何从 sip.voidptr (QImage.constBits()) 到 ctypes void 或 char 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com