首先,请原谅我以前是否已经得到了解答...我很擅长查找信息,但由于我的编程技巧非常基础,我可能不会理解那里有什么...
我正在尝试使用Python进行颜色转换。我以前使用lcms1的Python绑定,但由于没有lcms2的官方绑定,我试着用ctypes和ctypesgen运气。
我使用了ctypesgen.py -llcms2 /usr/include/lcms2.h /usr/include/lcms2_plugin.h -o lcms2.py
并删除了所有.value()
,因为它不起作用。
这一切都很精彩(对于我相当简单的需求),除非涉及线程...... 以下是示例代码:
from multiprocessing.dummy import Pool
from lcms2 import *
DblTriplet = c_double * 3
def Lab2RGB(values):
context = cmsCreateContext(None, None)
inprof = cmsCreateLab4ProfileTHR(context, None)
outprof = cmsCreate_sRGBProfileTHR(context)
inbuf = DblTriplet(*values)
outbuf = DblTriplet()
xform = cmsCreateTransformTHR(context, inprof, TYPE_Lab_DBL,
outprof, TYPE_RGB_DBL,
INTENT_PERCEPTUAL, 0)
cmsCloseProfile(inprof)
cmsCloseProfile(outprof)
cmsDoTransform(xform, byref(inbuf), byref(outbuf), 1)
cmsDeleteTransform(xform)
cmsDeleteContext(context)
return tuple(outbuf)
Lab = ((88.98,-1.31,110.87),
(87.55,2.18,109.06),
(60.81,65.68,85.06),
(58.66,70.05,51.19),
(55.26,72.14,43.46),
(43.8,79.35,12.7),
(51.55,78.77,-13.89),
(47.52,68.9,-42.48),
(18.74,54.58,-69.51),
(17.5,42.9,-76.01),
(14.92,31.84,-67.1),
(47.57,-33.39,-53.38),
(57.74,-77.16,0.18),
(17.06,1.29,2.54),
)
pool = Pool()
pool.map(Lab2RGB, Lab)
pool.close()
pool.join()
我实际上在PyQt应用程序中使用它,所以我使用QThread但它也崩溃了Python线程。我还使用了threading
,但最后使用了multiprocessing.dummy
,以便与multiprocessing
进行比较。我也尝试了“非THR”lcms2功能,同样的问题。我尝试了ctypesgen
以及h2py
。
所以我的问题是:我的线程实现有什么问题吗?我读过你必须小心使用ctypes和线程,但却无法理解我能做些什么......
我试过了valgrind python thatscript.py
,但是那个人说话的方式超出了我的头脑,但奇怪的是它不会出现段错...